Hadoop性能调优建议
一、服务器配置
1. BIOS配置:? ? 关闭smmu/关闭cpu预取/performance策略
2.? 硬盘优化??? raid0?打卡cache? /jbod???? scheduler/sector_size/read_ahead_kb
3.? 网卡优化??? rx_buff/ring_buffer/lro/中断绑核/驱动升级
4.? 内存插法:要用均衡插法,内存配对插。
5.? 占用通道:先把每个通道都插满,再去插对应通道。(内存通道分布请查看机箱背板示意图)
6.? Rank数:内存条硬件参数,1R和2R的区别,得用2R的
7.? 频率:内存条主频,要选择主频高的。
?8. Scheduler策略:ssd硬盘得用noop策略;机械硬盘建议deadline策略
?9. 驱动升级:用最新版本的网卡驱动程序?
二、操作系统调优
1、关闭selinux:
为了减少selinux的性能损耗,关闭selinux。vim /etc/sysconfig/selinux命令,打开selinux文件。将"SELINUX=enforcing"?改为?"SELINUX=disabled"。保存文件,重启服务器。
2、配置扩展文件描述符:
需要配置最大打开文件数为102400,否则在测试过程中可能会导致软件最大打开文件数被限制在1024,影响服务器性能。在“/etc/security/limits.conf”文件中写入以下配置。保存文件并重启。
?
*表示所有用户;hard表示严格的设定,必定不能超过这个设定的数值;soft表示警告的设定,可以超过这个设定值,但是若超过则有警告信息。
3、关闭不用的系统服务
Cpus等
4、配置网卡中断:(绑定的核专门用于处理网卡中断)
关闭irqbalance,重启服务器生效
systemctl stop irqbalance.service
systemctl disable irqbalance.service
步骤1:查询网卡中断默认在哪个numa上
cat /sys/class/net/$eth1 /device/numa_node
步骤2:查询中断号
cat /proc/interrupts | grep $eth1 | awk -F ':' '{print $1}'
步骤3:根据中断号,将每个中断各绑定在一个核上。
?echo $cpunum > /proc/irq/$irq/smp_affinity_list
步骤4:查看是否绑定成功
cat /proc/irq/$irq/smp_affinity_list
?5、关闭透明大页
查看配置:
cat /sys/kernel/mm/transparent_hugepage/enable
若显示不为nener则修改配置:
echo never > /sys/kernel/mm/transparent_hugepage/enable
三、Hadoop参数调优
1、Yarn组件在3.1.0版本合入的新特性支持,支持Yarn组件在启动Container时使能numa?感知功能,原理是读取系统物理节点上每个Numa节点的CPU核、内存容量,使用?Numactl命令指定启动container的CPU范围和mem bind范围,减少跨片访问.
Yarn-default.xml??里的
yarn.nodemanager.numa-awareness.enabled?????????????默认值为false改成ture
yarn.nodemanager.numa-awareness.read-topology??默认值为false改成ture
2、单台服务器可启动容器数量设置:
Mapred-site.xml
根据内存计算:NUM_container(mem)=容器内存/container内存
Mapreduc.map.memory.mb
Mapreduce.reduce.memory.mb
3、根据CPU计算:
NUM_container(vcore)=容器vcore/container vcore
mapreduce.map.cpu.vcores
Mapreduce.reduce.cpu.vcores
默认的DefaultResourceCalculator只考虑内存资源,并不采用vcore相关设置。???采用DominantResourceCalculator可以精确控制设置vcore资
在Capacity-scheduler.xml
yarn.scheduler.capacity.resource-calculator??默认值为DefaultResourceCalculator??改为? DominantResourceCalculator
4、Yarn?资源设置:资源的多少会决定任务执行的性能,而不决定任务运行的成败
Yarn-default.xml???
yarn.nodemanager.resource.memory-mb???默认值为-1???改为??容器内存,一般设置物理内存75%左右
yarn.scheduler.minimum-allocation-mb????默认值为1024MB???改为??最小容器内存;最大容器数量(单节点)=容器内存/最小容器内
mapred-default.xml
mapreduce.map.java.opts???? JVM最大内存,一般设置为container内存的0.75 ~ 0.8
mapreduce.reduce.java.opts??? JVM最大内存,一般设置为container内存的0.75 ~ 0.8
5、HDFS的Handler数量由dfs.namenode.handler.count、dfs.namenode.service.handler.count和dfs.datanode.handler.count控制。4节点规模不需要配置的太大。
dfs.namenode.handler.count?? Namenode?的RPC服务的用于监听处理来自客户端请求的线程数
Dfs.namenode.service.handler.count?? Namenode的RPC服务端用于监听来自datanode和所有非客户端节点请求的线程数
Dfs.datanode.handler.count??? Datanode同时可以处理来自客户端的请求线程数,当集群规模比较大或者同时跑的任务比较多,可以增加此值
6、减小副本数降低可靠性的方式提升写入的性能。减轻磁盘IO压力和网络压力。
增大客户端任务写入数据时数据包大小。dfs.client-write-packet-size设置过小,导致发送数据包的效率较低,写HDFS数据较慢,适当扩大该参数可以提升写HDFS时的效率(设置会65536的整数倍,推荐131072)
Dfs.replication????默认3副本,但可以修改客户端的副本数设置
Dfs.client-write-packet-size???客户端任务写入数据时数据包大小
6、Map buffer大小:
mapreduce.task.io.sort.mb??一般设置为容器内存的25%,加大可以减少map中间结果spill到硬盘次数。
mapreduce.map.sort.spill.percent??默认0.8?,?io sort buffer?达到80%时开始spill到硬盘。
mapreduce.reduce.shuffle.parallelcopies??默认?5或者10?,?可加大
7、reduce merge?内存中merge
每个reduce task把map?结果copy过去时都要对从各个map?端来的数据做merge(合并)动作, reduce端的内存没有那么大的时候,?只能把拉过来的数据先保存到本地磁盘中然后才做merge,?如果reduce端
的内存可以设置的很大,?完全就可以做memtomem的merge动作,
mapreduce.reduce.merge.memtomem.enabled=true当map输出文件达到mapreduce.reduce.merge.memtomem.threshold时,触发合并
8、Heartbeat
yarn.nodemanager.heartbeat.interval-ms 1000???(ms)??设置成100
yarn.resourcemanager.nodemanagers.heartbeat-interval-ms
9、读写文件的buffer设置
io.file.buffer.size
这个属性只要是读写文件就都得使用.?默认4K?(4K~64K,太大了可能会变差)
?
?
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!