hadoop集群调优-OS和文件系统部分
OS and File System
根据Dell(因为我们的硬件采用dell的方案)关于hadoop调优的相关说明,改变几个Linux的默认设置,Hadoop的性能能够增长大概15%。
open file descriptors and files
文件描述符是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开,文件描述符这一概念往往只适用于UNIX、Linux这样的操作系统。
在Linux系列的操作系统上,由于Linux的设计思想便是把一切设备都视作文件。因此,文件描述符为在该系列平台上进行设备相关的编程实际上提供了一个统一的方法。
在CentOS中通过下面的命令查看:
cat /proc/sys/fs/file-max
800000
也可以通过查看文件中的内容来查看,其中的fs.file-max定义了最大的打开文件描述符数量:
cat /etc/sysctl.conf fs.file-max = 800000
net.core.rmem_default = 12697600
net.core.wmem_default = 12697600
net.core.rmem_max = 873800000
net.core.wmem_max = 655360000
net.ipv4.tcp_rmem = 8192 262144 4096000
net.ipv4.tcp_wmem = 4096 262144 4096000
net.ipv4.tcp_max_orphans = 300000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 1025 65535
net.ipv4.tcp_max_syn_backlog = 100000
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp.keepalive_time = 1200
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 1500
net.core.somaxconn=32768
vm.swappiness=0
CentOS下可以通过下面的命令来增加最大打开文件描述符数量,在集群中的每台机器上执行:
# su – (hdfs & Hadoop users)
# ulimit –S 4096
# ulimit –H 32832
也可以通过修改/etc/sysctl.conf文件中的fs.file-max来达到目的。
由于这部分的数值远远大于文档中所列出的数字,此部分没有做优化。
File System
Linux的发行版本对于文件系统有着不同的初始设置。经过测试不同的Linux File Systems,发现EXT4格式要比EXT3更好。EXT4中的新特性,比如多块延迟分配,相比于EXT3要提高很大一部分的性能。在EXT3中,当一个文件被创建或数据被添加到一个已经存在的文件时,会直接调用文件block allocator,每个block一次;而EXT4则不同,它会做一个缓冲,以便以后能够最优化地将数据连续地放入硬盘。连续的文件能够很容易地被机械硬盘读写以能够提高存储IO的整体性能。
默认情况下,Linux会把文件访问的时间atime作记录,这在绝大多数场合下都是没有必要的,尤其是IO负载比较高的Hadoop集群下,可以尝试使用noatime和nodiratime。
在Hadoop中,很多中间文件(比如map输出的中间文件)都只会在Hadoop job运行过程中存活,job执行完成就会被删除了,根本没有必要存在访问时间戳。
通过命令cat /etc/fstab来查看当前的设置:
UUID=5d75c681-1101-46c2-9428-3e48310765ce / ext3 defaults 1 1
LABEL=/boot /boot ext3 defaults 1 2
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
LABEL=SWAP-sda3 swap swap defaults 0 0
可以看到当前并没有使用EXT4格式以及noatime。
注意,修改完设置后需要重新挂载文件系统,不需要重启。
mount -o remount /
另外一个对于dataNodes的优化点就是通过改变文件系统的保留块大小。Linux文件系统中为了保证root能够登录到操作系统中,需要保留一定的磁盘空间,默认这个值设置为5%。但是当前磁盘空间都是TB级别的,因此保留5%就会造成一大部分空间的浪费,对于1TB来说就是50G。
通过下面的命令来列出当前的保留磁盘空间。
tune2fs –l /dev/sdaX
下面的命令可以将保留磁盘空间的容量设置成1%:
tune2fs –m 1 /dev/sdaX
Network
两个网络相关的参数可以影响Hadoop的性能。net.core.somaxconn Linux内核设置能够支持NameNode和JobTracker的大量爆发性的HTTP请求。
net.core.somaxconn是listen()的默认参数,挂起请求的最大数量.默认是128.对繁忙的服务器,增加该值有助于网络性能,当前已经被调整到32768。
这个参数同样可以通过编辑/etc/sysctl.conf文件来改变,其中有一行:
net.core.somaxconn=32768
设置txqueuelen到4096及以上能够更好地适应在Hadoop集群中的突发流量, txqueuelen代表用来传输数据的缓冲区的储存长度,通过下面的命令可以对该参数进行设置为4096:
sudo ifconfig eth# txqueuelen 4096
其他的一系列在/etc/sysctl.conf中的配置,可以对网络产生影响:
net.core.rmem_default = 12697600
net.core.wmem_default = 12697600
net.core.rmem_max = 873800000
net.core.wmem_max = 655360000
net.ipv4.tcp_rmem = 8192 262144 4096000
net.ipv4.tcp_wmem = 4096 262144 4096000
net.ipv4.tcp_max_orphans = 300000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 1025 65535
net.ipv4.tcp_max_syn_backlog = 100000
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp.keepalive_time = 1200
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 1500
上述设置需要重新启动整个集群系统。
Transparent Huge Page
Linux的特性Transparent HugePages在大部分的应用中都提高了整体性能,包括Hadoop的工作负载。但是,其中的一项被称为Compaction的子特性会导致Hadoop工作负载的问题,在设置了Compaction的Hadoop benchmark测试中,结果会存在25%的浮动,而关闭Compaction后浮动消失。
当进行内存碎片整理时,Compaction会提高CPU资源利用率,这能够帮助优化Transparent HugePages,但是偷取了CPU资源,却影响了hadoop中正在运行的task性能。
通过以下命令可以查看是否启用compaction:
cat /sys/kernel/mm/redhat_transparent_hugepages/defrag
以及以下命令来禁用Compaction:
echo never > /sys/kernel/mm/redhat_transparent_hugepages/defrag
这个特定暂时没有进行修改,因为CentOS中没找到在哪儿设置。
Linux kernal swappiness parameter
任何进程只要涉及到换页向磁盘写文件都会降低hadoop的性能,Linux内核进程vm.swappiness会检查无用的内存分页并将它们交换到磁盘上。默认的值是60,可以设置为0——100。对于Hadoop来说,设置成0是一个好主意,这并没有将这个特性关闭,Linux仍然进行换页操作,但是由于这个进程在仍然还有一大部分空闲内存时仍然会进行换页,将它设置成0可以尽可能地减少内存和磁盘的延迟。
这个参数仍然可以通过编辑/etc/sysctl.conf来进行修改。
当前集群已经设置:
vm.swappiness=0
hadoop集群调优-OS和文件系统部分的更多相关文章
- hadoop 集群调优实践总结
调优概述# 几乎在很多场景,MapRdeuce或者说分布式架构,都会在IO受限,硬盘或者网络读取数据遇到瓶颈.处理数据瓶颈CPU受限.大量的硬盘读写数据是海量数据分析常见情况. IO受限例子: 索引 ...
- hadoop集群调优-hadoop settings and MapReduce
Hadoop Settings 由于Hadoop节点的系统配置,一些hadoop的设置可以减少运行系统中的瓶颈.首先,提高Java运行时的堆内存容量,也要和系统中的整体内存容量相关:其次,保持hado ...
- Elasticsearch集群调优
系统调优 禁用swap 使用swapoff命令可以暂时关闭swap.永久关闭需要编辑/etc/fstab,注释掉swap设备的挂载项. swapoff -a 如果完全关闭swap不可行,可以试着降低s ...
- Elasticsearch 6.x版本全文检索学习之集群调优建议
1.系统设置要到位,遵照官方建议设置所有的系统参数. https://www.elastic.co/guide/en/elasticsearch/reference/6.7/setup.html 部署 ...
- [hadoop] 集群启动和内存调优
1.启动Hadoop集群 #首先查看下zoo.cfg里面配置的server.id和集群主机的id是否一致 #如果不一致会造成yarn控制不了从节点的启动 cat /home/hadoop/zookee ...
- AMBARI部署HADOOP集群(4)
通过 Ambari 部署 hadoop 集群 1. 打开 http://192.168.242.181:8080 登陆的用户名/密码是 : admin/admin 2. 点击 “LAUNCH INS ...
- 大数据系列(2)——Hadoop集群坏境CentOS安装
前言 前面我们主要分析了搭建Hadoop集群所需要准备的内容和一些提前规划好的项,本篇我们主要来分析如何安装CentOS操作系统,以及一些基础的设置,闲言少叙,我们进入本篇的正题. 技术准备 VMwa ...
- [转]大数据hadoop集群硬件选择
问题导读 1.哪些情况会遇到io受限制? 2.哪些情况会遇到cpu受限制? 3.如何选择机器配置类型? 4.为数据节点/任务追踪器提供的推荐哪些规格? 随着Apache Hadoop的起步,云客户 ...
- 大数据——Hadoop集群坏境CentOS安装
前言 前面我们主要分析了搭建Hadoop集群所需要准备的内容和一些提前规划好的项,本篇我们主要来分析如何安装CentOS操作系统,以及一些基础的设置,闲言少叙,我们进入本篇的正题. 技术准备 VMwa ...
随机推荐
- cookies分类
Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie. 内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短暂的.硬盘Cooki ...
- vim学习相关链接
1:http://blog.csdn.net/niushuai666/article/details/7275406 2:http://ju.outofmemory.cn/entry/79671 3. ...
- 解决 src/MD2.c:31:20: fatal error: Python.h: No such file or directory安装包错误
在linux命令行安装包时报错 src/MD2.c:31:20: fatal error: Python.h: No such file or directory 原因:缺少了python的dev 解 ...
- 利用层序遍历(含空节点)和中序遍历重建二叉树 python
给定一颗二叉树的层序遍历(不含None的形式)和中序遍历序列,利用两个序列完成对二叉树的重建. 还是通过一个例子来说明整个过程,下图所示的二叉树,层序遍历结果为[a,b,c,d,e],中序遍历结果为[ ...
- 如何从github下载项目的源代码,包含git客户端,直接下载,vs下载
有好多小伙伴可能刚刚接触github,还不知道如果和github下载项目,此处写个博客统一的声明.从多种方式下载源代码,加深对git的理解. 首先先解释下git的含义,git是一个源代码的管理工具,通 ...
- iOS开发错误汇总
人非圣贤孰能无过 dyld: Library not loaded: /... 过而能改善莫大焉 iOS下dyld: Library not loaded: 错误信息解决方案
- 类的静态方法@staticmethod
静态方法 @staticmethod 静态方法是定义在类内部的函数,此函数的作用域是类的内部 说明: 静态方法需要使用 @staticmethod装饰器定义 静态方法与普通函数定义相同,不需要传入se ...
- Git学习的网址
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 https://github.co ...
- MySQL 5.7笔记
1. 初始化 重命名my-default.ini为my.ini 添加character_set_server=utf8 运行mysqld --initialize 2. 重置密码 服务器运行: mys ...
- 用eclipse打包可执行的jar(含第三方jar包)
在eclipse中的解决方式如下: 在工程目录下(与src同层)建立lib目录,将第三方Jar包放到这个目录里(copy,paste即可)[如果直接引用本地的jar,一旦换电脑就呵呵了...] 右击工 ...