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

标签: hadoop 集群 os | 发表时间:2014-07-19 15:23 | 作者:brandNewUser
出处:http://www.iteye.com

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

 

 



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


ITeye推荐



相关 [hadoop 集群 os] 推荐:

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

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

HADOOP OS部分优化

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

Hadoop集群与Hadoop性能优化

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

[hadoop] 搭建自己的hadoop集群

- - CSDN博客系统运维推荐文章
       a>  五台centos6.2虚拟机,配置主机名、IP地址、yum源、.        b>  准备所需要的软件包. 2> 配置我自己的hadoop 集群.       a>  修改5台机器的hosts文件.       b>  配置master无密码登录slave,在master01和master02上执行以下命令:   .

Hadoop 集群基准测试

- - IT瘾-dev
生产环境中,如何对 Hadoop 集群进行 Benchmark Test. 本文将通过 Hadoop 自带的 Benchmark 测试程序:TestDFSIO 和 TeraSort,简单介绍如何进行 Hadoop 的读写 & 计算性能的压测. 回顾上篇文章: 认识多队列网卡中断绑定. (本文使用 2.6.0 的 hadoop 版本进行测试,基准测试被打包在测试程序 JAR 文件中,通过无参调用 bin/hadoop jar ./share/hadoop/mapreduce/xxx.jar 可以得到其列表 ).

[hadoop] 基于Hadoop集群的HBase集群的配置

- - CSDN博客系统运维推荐文章
       a> 已经配置完成的Hadoop集群.        b> 所需要的软件包. 2>  单独安装的ZooKeeper集群,不基于HBase集群管理.        a> 在master01上解压zookeeper-3.4.4.tar.gz.        b> 修改Zookeeper的配置文件.

hadoop集群环境的配置

- - ITeye博客
  之前说过,我们的hadoop集群已经搭建起来了,只是具体的步骤还没来得及整理,幸好今天又把流程走了一遍,真的是不做不晓得,一做才发现自己原来什么都忘记得差不多了,在此记录一下搭建hadoop集群的步骤,便于需要的时候看看.   这个配环境的过程真的是比较困难的,我今天搞了一天终于把自己的机器作为datanode连接上了master机器,我还是年前搞过一遍的呢,所以这个还是需要耐心+细心的.

腾讯TDW:大型Hadoop集群应用

- - 服务器运维与网站架构|Linux运维|X研究
PS:TDW是腾讯最大的离线数据处理平台. 本文主要从需求、挑战、方案和未来计划等方面,介绍了TDW在建设单个大规模集群中采取的JobTracker分散化和NameNode高可用两个优化方案. TDW(Tencent distributed Data Warehouse,腾讯分布式数据仓库)基于开源软件Hadoop和Hive进行构建,打破了传统数据仓库不能线性扩展、可控性差的局限,并且根据腾讯数据量大、计算复杂等特定情况进行了大量优化和改造.

【重要】hadoop集群默认配置和常用配置

- - 学着站在巨人的肩膀上
配置hadoop,主要是配置core-site.xml,hdfs-site.xml,mapred-site.xml三个配置文件,默认下来,这些配置文件都是空的,所以很难知道这些配置文件有哪些配置可以生效,上网找的配置可能因为各个hadoop版本不同,导致无法生效. 浏览更多的配置,有两个方法:. 1.选择相应版本的hadoop,下载解压后,搜索*.xml,找到core-default.xml,hdfs-default.xml,mapred-default.xml,这些就是默认配置,可以参考这些配置的说明和key,配置hadoop集群.

Hadoop集群安装&Hbase实验环境搭建

- - CSDN博客云计算推荐文章
1.安装ubuntu10.04操作系统. 安装成功后,系统也会有相应提示:. sudo vi /etc/inetd.conf并加入以下一行. sudo vi /etc/xinetd.conf并加入以下内容:. sudo vi /etc/xinetd.d/telnet并加入以下内容:. 重启机器或重启网络服务sudo /etc/init.d/xinetd restart.