集群中任意一个节点都可以被用来提交认任务,虽然通常我们使用master节点提交任务。HADOOP客户端不参与计算和存储,专门用来上传下载文件和提交任务。
性能优化4大块:
具体优化如下:
1.选择合适的硬件
低配:
CPU 双路四核2.6GHz
内存 64GB DDR3
磁盘控制器 SAS控制器
硬盘 1TB X 4
中配:
CPU 2 X 6 Core 2.9GHz/15MB cache
内存 128GB DDR3-1600 ECC
磁盘控制器 SAS 6GB/S
磁盘 12 X 3 TB LFF SATA II 7200 RPM
交换机 2 X 千兆交换机
高配:
CPU 2 X 6 Core 2.9GHz/15M cache
内存 256GB DDR3-1600 ECC
磁盘控制器 2 X SAS 6GB/S
磁盘 24 X 1 TB SFF Nearline/MDL SAS 7200 RPM
交换机 万兆交换机
节点解释:
NameNode:内存容量决定HDFS所能存储的文件总数,SecondaryNameNode类似。
ResourceManager:内存和需要处理的作业有关。
内存和虚拟CPU要满足一个线性比例:
虚拟CPU个数 = CPU数 X 单个CPU核数 X 单个CPU超线程数。
如:一个双核六路CPU,具有HT(超线程)技术。
则虚拟核数 2 X 6 X 2 = 24
每个CPU分配4 ~ 8GB,则服务内存 96 ~ 192GB,此外还要考虑操作系统和其他服务和预留内存。
2.操作系统调优
1.避免使用swap分区
vm.swappiness设为0,值域为0 ~ 100
2.调整内存分配
vm.overcommit_memory设为2。2表示内核允许分配超过所有物理内存和交换空间的50%。
3.修改net.core.somaxconn参数
一个linux内核参数,表示socket监听backlog上限。值 >= 32768
4.增大同时打开文件描述符的上限。
5.选择合适的文件系统
文件系统被格式化以后,要禁用文件的访问时间
6.关闭THP
运行hadoop时,THP会引起CPU占用率偏高。
3.JVM调优
调整 JM FLAGS 和 JVMGC ,调整后的效率大约有4%的提升。
4.hadoop参数调优(针对CDH5版本)
1.hdfs-site.xml
hadoop文件快大小,通常设为128M或256M
namenode和datanode同时通信的线程数,默认10,将其设为40.
datanode上面连接数的最大值。
执行start-balancer.sh的带宽默认 1048576(1MB),将其增大到20MB/s
hdfs文件副本数。多个任务同时读取一个文件时,读取可能会造成瓶颈,可适当增加副本数。如果修改hadoop客户端上传文件的副本数,将以hadoop客户端配置为准。
datanode在进行文件传输时最大线程数,通常设置为8192.
2.core-size.xml
hadoop缓冲区大小,用于hadoop读写hdfs文件还有map的中间结果输出。默认4KB,增加为128KB。
3.yarn-site.xml
物理节点有多少内存加入资源池,设定该值时注意为操作系统和其他服务预留资源。
物理节点有多少虚拟CPU加入资源池。与上一个参数构成容器资源的两个维度。
内存申请的规整话化单位。默认为1014MB.即如果申请1.5GB,则被申请为2GB。
虚拟CPU的规整话化单位。默认为1个
单个任务(容器)能够被申请到的最大内存。默认8GB,如果设定和
yarn.nodemanager.resource.cpu-mb一样,则表示单个任务使用的内存资源不受限制。
单个任务(容器)能够被申请到的最小内存。默认1GB
单个任务(容器)能够被申请到的最大CPU数目。默认8GB,如果设定和
yarn.nodemanager.resource.cpu-vcores一样,则表示单个任务使用的内存资源不受限制。
4.mapred-site.xml
map任务的中间结果是否压缩,true压缩。
jvm重用设置,默认为1,表示一个jvm只能启动一个任务,-1表示可以的启动任务不受限制。
分别开启map和reduce任务的推测机制,推测机制可以有效地防止,因为瓶颈而导致的拖累整个作业,但也注意,推测机制会抢占系统资源。
mapreduce中间结果的本地存储路径,将该值设置为一系列多磁盘目录有助于提高I/O效率
map任务需要的内存大小。
map任务需要的虚拟CPU数目。要与mapreduce.map.memory.mb成线性比例才不至于浪费。
reduce任务需要的内存大小,一般要大于mapreduce.map.memory.mb。
reduce任务向调度器需要的虚拟CPU数,默认为1,根据容器虚拟CPU数设定,可以适量增大。要与mapreduce.map.memory.mb成线性比例才不至于浪费,一般要大于mapreduce.map.cpu.vcores。
该参数为reduce任务从map任务复制输出的工作线程数,默认5,可适当调高,太高会引起大量数据同时在网络传输,引起I/O压力,科学的设置为4 x Lgn,n为集群容量大小。
shuffle中复制阶段耗费reduce任务堆比例,默认0.7,由上面的计算得出。
当内存使用率超过该参数时,会触发一次合并操作,将内存中的数据刷写到磁盘
控制reduce任务的启动时机,默认0.05,即当map任务完成数目的5%时,启动reduce。
5.HADOOP参数调优总结
(1)增大作业的并行度,如增大map任务数量
(2)保证任务执行时有足够的资源
(3)满足前两个原则的前提下,尽量为shuffle阶段提供资源