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-Eclipse-Plugin是Hadoop开发不可或缺的一部分,无论是1.2.1版本还是2.8.0版本,它们都为开发者提供了便利的工具,帮助他们更好地理解和利用Hadoop的潜力。随着Hadoop技术的不断演进,我们期待未来...
Hadoop-Eclipse-Plugin-3.1.1是一款专为Eclipse集成开发环境设计的插件,用于方便地在Hadoop分布式文件系统(HDFS)上进行开发和调试MapReduce程序。这款插件是Hadoop生态系统的组成部分,它使得Java开发者能够更加...
Ubuntu虚拟机HADOOP集群搭建eclipse环境 hadoop-eclipse-plugin-3.3.1.jar
Hadoop-eclipse-plugin-2.7.2正是为了解决这个问题,它为Eclipse提供了与Hadoop集群无缝对接的功能,使得开发者可以在熟悉的Eclipse环境中编写、调试和运行Hadoop MapReduce程序。 首先,让我们深入了解Hadoop-...
本文将深入探讨如何使用Eclipse IDE结合hadoop-eclipse-plugin-2.6.0.jar插件,实现在Windows环境下进行远程连接到Hadoop集群,尤其适用于64位操作系统。 首先,我们要理解Hadoop的核心概念。Hadoop是由Apache基金...
Hadoop-eclipse-plugin是Hadoop生态系统中的一个重要工具,它允许开发者使用Eclipse IDE直接在Hadoop集群上开发、测试和部署MapReduce程序。这个插件极大地简化了Hadoop应用程序的开发流程,使得Java开发者能够利用...
hadoop2 lzo 文件 ,编译好的64位 hadoop-lzo-0.4.20.jar 文件 ,在mac 系统下编译的,用法:解压后把hadoop-lzo-0.4.20.jar 放到你的hadoop 安装路径下的lib 下,把里面lib/Mac_OS_X-x86_64-64 下的所有文件 拷到 ...
1. 文件系统接口(FileSystem API):Hadoop Common提供了与各种不同类型的文件系统交互的接口,包括本地文件系统、HDFS(Hadoop Distributed File System)和其他分布式存储系统。这使得Hadoop能够灵活地适应不同的...
Hadoop Common是Hadoop项目的基础模块,它包含了许多通用的实用工具和库,如网络通信、文件系统抽象、安全机制等。这些工具和库不仅服务于HDFS和MapReduce,还为其他Hadoop生态系统中的项目如HBase、Hive等提供支持...
HDFS(Hadoop Distributed File System)是Hadoop的核心部分,是一种可扩展、高容错性的分布式文件系统。它设计为在大规模集群上运行,能够处理PB级别的数据。HDFS客户端是与HDFS交互的接口,允许用户执行如读取、...
Hadoop作为一个开源的分布式计算框架,其组件众多,而“hadoop-common-2.7.1-bin-master.zip”正是其中的重要组成部分——Hadoop Common的工具包。这个压缩包包含了运行Hadoop集群所必需的一些基础工具和库文件,...
hadoop-eclipse-plugin-3.1.3,eclipse版本为eclipse-jee-2020-03
hadoop-lzo-0.4.21-SNAPSHOT.jar是该工具的Java归档(JAR)文件,它是Hadoop LZO的核心组件,包含了实现LZO压缩和解压缩功能的所有类和库。这个JAR文件需要添加到Hadoop的类路径(classpath)中,以便Hadoop集群能够...
标题中的“hadoop-common-2.6.0-bin-master”指的是Hadoop Common的2.6.0版本的源码编译后的二进制主目录,这个目录包含了运行Hadoop所需的各种基础工具和库。 在Windows 10环境下,由于操作系统本身的特性和Linux...
标题中的"apache-hadoop-3.1.0-winutils-master.zip"是一个专门为解决Windows 10上Hadoop安装问题的压缩包,它包含了一些修改后的bin目录文件,使得Hadoop可以在Windows环境中正常运行。 在Hadoop的默认下载版本中...
windows下 eclipse操作hadoop集群 插件
Hadoop 2.7.3是Hadoop的一个版本,其中包含了`hadoop-common-2.7.3-bin`这个模块,这个模块是Hadoop的基本组件集合,提供了在不同操作系统上运行Hadoop所需的各种工具和库。 标题中提到的`hadoop.dll`和`winutils....
2. 配置集群信息:如果你的Hadoop集群不是本地模式,需要在"Cluster Configuration"中添加集群的配置,包括JobTracker和NameNode的地址。 三、创建Hadoop项目 有了插件支持,创建Hadoop MapReduce项目变得非常简单...
在实际使用中,将`hadoop-eclipse-plugin-2.6.0.jar`文件复制到Eclipse的`dropins`目录下,重启Eclipse后,插件会被自动识别并加载。然后,开发者可以在Eclipse的"New"菜单中找到Hadoop相关的项目模板,开始构建...
在大数据处理领域,Hadoop无疑是一个核心组件,它提供了一个分布式文件系统(HDFS)和MapReduce计算框架,使得大规模数据处理变得可能。而为了方便开发者在Eclipse这样的集成开发环境中直接操作Hadoop集群,Hadoop ...