HADOOP OS部分优化

标签: hadoop os 优化 | 发表时间:2015-01-17 16:39 | 作者:zhangxiong0301
分享到:
出处:http://www.iteye.com

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

或者:echo 2048 >   /proc/sys/net/core/somaxconn    但是这样系统重启后保存不了。 

 

设置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来进行修改。

 

 也可以如下:echo 0 > /proc/sys/vm/swappiness

 

当前集群已经设置:

vm.swappiness=0


已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [hadoop os 优化] 推荐:

HADOOP OS部分优化

- - 数据库 - ITeye博客
文件描述符是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表. 当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符. 在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开,文件描述符这一概念往往只适用于UNIX、Linux这样的操作系统. 在Linux系列的操作系统上,由于Linux的设计思想便是把一切设备都视作文件.

Hadoop集群与Hadoop性能优化

- - 学着站在巨人的肩膀上
本文讲解一下Hadoop集群、Hadoop性能优化、Hadoop机架感知实现、Hadoop配置等,下面是有关这些命令的具体介绍. Hadoop性能优化:Hadoop机架感知实现及配置:分布式的集群通常包含非常多的机器,由于受到机架槽位和交换机网口的限制,通常大型的分布式集群都会跨好几个机架,由多个机架上的机器共同组成一个分布式集群.

hadoop集群调优-OS和文件系统部分

- - 开源软件 - ITeye博客
根据Dell(因为我们的硬件采用dell的方案)关于hadoop调优的相关说明,改变几个Linux的默认设置,Hadoop的性能能够增长大概15%. 文件描述符是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表. 当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符.

Hadoop 优化总结(一)

- - 开源软件 - ITeye博客
自带的Text很好用,但是字符串转换开销较大,故根据实际需要自定义Writable,注意作为Key时要实现WritableCompareable接口. 避免output.collect(new Text( ),new Text()). 提倡key.set( ) value.set( ) output.collect(key,value).

Hadoop平台优化综述(二)

- - 学着站在巨人的肩膀上
Dong | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及 版权声明. 网址: http://dongxicheng.org/mapreduce/hadoop-optimization-1/. 4.     从系统实现角度进行优化. 4.1    在可移植性和性能之间进行权衡. 论文[16]主要针对HDFS进行了优化,它分析了HDFS性能低下的两个原因:调度延迟和可移植性假设.

Hadoop平台优化综述(一)

- - 学着站在巨人的肩膀上
Dong | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及 版权声明. 网址: http://dongxicheng.org/mapreduce/hadoop-optimization-0/. 随着企业要处理的数据量越来越大,MapReduce思想越来越受到重视. Hadoop是MapReduce的一个开源实现,由于其良好的扩展性和容错性,已得到越来越广泛的应用.

【Hadoop】MapReduce使用combiner优化性能

- - CSDN博客云计算推荐文章
当MapReduce模型中,reduce执行的任务为统计分类类型的值总量或去重后的数量,或最大值最小值时,可以考虑在Map输出后进行combine操作;这样可以减少网络传输带来的开销,同时减轻了reduce任务的负担. Combine操作是运行在每个节点上的,只会影响本地Map的输出结果;Combine的输入为本地map的输出结果(一般是数据在溢出到磁盘之前,可以减少IO开销),其输出则作为reduce的输入.

hadoop的IO和MapReduce优化参数

- - CSDN博客系统运维推荐文章
           在MapReduce执行过程中,特别是Shuffle阶段,尽量使用内存缓冲区存储数据,减少磁盘溢写次数;同时在作业执行过程中增加并行度,都能够显著提高系统性能,这也是配置优化的一个重要依据.            下面分别介绍I/O属性和MapReduce属性这两个类的部分属性,并指明其优化方向.

Hadoop优化 第一篇 : HDFS/MapReduce - leocook

- - 博客园_首页
比较惭愧,博客很久(半年)没更新了. 最近也自己搭了个博客,wordpress玩的还不是很熟,感兴趣的朋友可以多多交流哈. 地址是:http://www.leocook.org/. 另外,我建了个QQ群:305994766,希望对大数据、算法研发、系统架构感兴趣的朋友能够加入进来,大家一起学习,共同进步(进群请说明自己的公司-职业-昵称).

Hadoop 升级创建硬链接效率优化

- - 董的博客
Hadoop版本升级过程中,namenode会将元数据信息拷贝一份(fsimage,edits等),而datanode会对所有数据块建立硬链接,以防升级过程中出现问题,进行回滚操作. 在databode上,采用了ln命令对每个block文件建立硬链接,而当集群规模非常大时,用ln命令(Apache Hadoop-0.20.2以及之前版本采用的方法)对大量文件建立硬链接的代价非常大,为了提高建立硬链接的效率,本文讨论了几种方法.