Hadoop性能调优
来源:互联网 发布:微信企业号java源码 编辑:程序博客网 时间:2024/05/21 19:23
一.操作系统调优
1.避免使用swap分区
2.调整内存分配策略
系统内核根据vm.overcommit_memory的值来决定分配策略,值为0,1,2。
0表示内核将检查是否有足够的可用内存供应用进程使用,如果有则申请允许,否则内存申请失败
1表示内核允许分配所有的物理内存,而不管内存的内存状态如何
2表示内核允许分配超过所有物理内存和交换空间的总和,通过vm.overcommit_ratio的值设置允许超过的比例
建议设置为2.
二.Hadoop参数调优
1.hdfs-site.xml
<property> <name>dfs.block.size</name> <value>134327728</value></property>
hadoop块的大小通常设置为128M
<property> <name>dfs.namenode.handler.count</name> <value>40</value></property>
NameNode和DataNode通信的线程数默认为10
<property> <name>dfs.datanode.max.xcievers</name> <value>65536</value></property>对于DataNode如同Linux上的文件句柄的限制,当DataNode上的连接数超过这个配置的设置,DataNode就会拒绝连接。
<property> <name>dfs.balance.bandwidthPerSec</name> <value>20485760</value></property>执行start-balancer.sh的带宽,默认1048576(1MB/s)
<property> <name>dfs.replication</name> <value>3</value></property>hdfs上文件的副本数,默认为3.
2.core-site.xml
<property> <name>io.file.buffer.size</name> <value>131072</value></property>hadoop缓存区大小,用于hadoop读写hdfs文件,和map中间结果的输出。默认为4kb。
<property> <name>fs.inmemory.size.mb</name> <value>200</value></property>
reduce阶段合并map输出的内存限制。
3.mapred-site.xml
<property> <name>mapred.tasktracker.map.tasks.maximum</name> <value></value></property>
map任务的槽数,同时运行map任务的最大数量,默认为2
<property> <name>mapred.tasktracker.reduce.tasks.maximum</name> <value></value></property>
reduce任务槽数,同时运行的reduce任务的最大数量,默认为2(每个节点的所有槽数加起来不能超过节点的cpu数)<property> <name>mapred.max.split.size</name> <value>134217728</value></property>InputSplit的个数等于mapred.min.split.size和min(mapred.max.split.size, dfs.block.size)的最大值。mapred.min.split.size, mapred.max.split.size和dfs.block.size都可以影响inputsplit的个数。而inputsplit的个数决定map的个数,所以可以通过修改mapred.max.split.size和mapred.min.split.size来达到增加或者减少map任务的个数。最好使inputsplit的大小和块大小一致以实现本地化。<property> <name>mapred.min.split.size</name> <value>134217728</value></property>
<property> <name>mapreduce.jobtracker.heartbeat,interval.min</name> <value>2000</value></property>
JobTracker和TaskTracker之间心跳间隔的最小值,默认为3000.<property> <name>mapreduce.jobtracker.heartbeats.scaling.factor</name> <value>0.01</value></property>默认0.01,表示每增加100个节点,心跳增加100*0.01=1秒<property> <name>mapred.job.tracker.handler.count</name> <value>40</value></property>jobtracker处理各个TaskTracker的RPC请求,默认为10<property> <name>tasktracker.http.threads</name> <value>40</value></property>TaskTracker处理reduce任务发送的请求的HTTP服务器的线程数,应该与reduce任务槽数和被允许处理的数据的分数成正比,默认为10<property> <name>mapred.compress.map.output</name> <value>true</value></property>Map中间任务默认不采取压缩,设置为true会对中间结果压缩,减少中间结果数据带宽传输需要。还可以设置mapred.map.output.compression.codec选择压缩算法<property> <name>mapred.job.reuse.jvm.num.tasks</name> <value>-1</value></property>JVM重用设置,默认为1,表示一个JVM只能启动一个任务,设置为-1表示1个JVM启动的任务数不受限制。<property> <name>mapred.map.tasks.speculative.execution</name> <value>true</value></property><property> <name>mapred.reduce.tasks.speculative.execution</name> <value>true</value></property>以上两个参数分别是开始Map/Reduce任务的推测机制,推测机制可以有效的防止因为瓶颈而导致整个任务运行缓慢,注意:推测执行会抢占系统资源,默认为true<property> <name>mapred.local.dir</name> <value>/data/tmp1,/data2/tmp2,/data3/tmp3</value></property>
mapreduce中间结果存放的本地路径,设置多盘有助于提高IO效率。<property> <name>mapred.child.java.opts</name> <value>-Xmx2024m</value></property>TaskTracker的java子进程的java参数,默认-Xmx200M。也就是一个任务获取的最大内存,不止可以配置heap,还可以配置GC,eg:-Xmx1024M -verbose:gc<property> <name>mapred.map.child.java.opts</name> <value>-Xmx1024m</value></property>Map任务进程的java参数,解决mapred.child.java.opts粗粒度问题,默认为-Xmx200M<property> <name>mapred.reduce.child.java.opts</name> <value>-Xmx1024m</value></property>Reduce任务执行的java参数,解决mapred.child.java.opts粗粒度问题,默认为-Xmx200M<property> <name>io.sort.mb</name> <value>100</value></property>
Map任务的环形缓冲区,默认100m<property> <name>io.sort.spill.percent</name> <value>0.80</value></property>
Map任务输出到环形缓冲区的阈值,一旦缓冲区内容占缓冲区比例超过这个值,就将缓冲区刷写到mapred.local.dir目录。默认0.8,建议不低于0.5<property> <name>mapred.reduce.parallel.copies</name> <value>25</value></property>
该值为reduce从TaskTracker复制map任务输出的工作线程数。默认为5,如果过大会导致大量数据同时在网络传输,引起IO压力,比较科学的设定为4*lgN,N为集群大小<property> <name>mapred.job.shuffle.input.buffer.percent</name> <value>0.7</value></property>
该值为shuffle中复制阶段耗费的reduce任务内存比,默认0.7,reduce任务内存为mapred.reduce.child.java.opts<property> <name>mapred.job.shuffle.merge.percent</name> <value>0.66</value></property>
当内存使用率超过该值,将触发一次合并操作,将内存中的数据刷写到磁盘上,默认0.66<property> <name>mapred.reduce.slowstart.completed.maps</name> <value>0.05</value></property>该值控制reduce启动的时机,默认0.05,即map任务完成数目达到5%时,启动reduce任务,可适当调高,但reduce任务启动过早或过晚都会导致任务时间增加。<property> <name>io.sort.fator</name> <value>10</value></property>
map端和reduce端合并策略,表示一个合并的文件数目,默认为10,设置过大会使内存消耗过大,但设置过小会增加合并次数。
调优原则:
1)增大作业并行度,如增加map数量
2)保证任务执行有足够资源
3)保证前两条后,尽可能为shuffle提供资源
0 0
- hadoop性能调优
- Hadoop性能调优
- hadoop性能调优
- Hadoop性能调优
- hadoop性能调优
- Hadoop性能调优
- Hadoop性能调优
- Hadoop性能调优
- Hadoop性能调优
- Hadoop性能调优
- hadoop性能调优
- hadoop性能调优笔记
- hadoop性能调优笔记
- Hadoop性能调优总结
- hadoop 层面性能调优
- Hadoop MapReduce性能调优
- hadoop性能调优的一些笔记
- Hadoop性能调优(一)--总述
- Android demo 项目-汇总-201611-02期
- Android开发-Retrofit-AndroidStudio(三)ListView&Picasso
- 11月15日——离noip还有4天[Black Bullet]
- 浅谈StringBuffer类初始容量及扩容
- 11E求最大公约数和最小公倍数
- Hadoop性能调优
- JRE、JDK和SDK分别是什么
- Visual Studio (VS) 操作小技巧(持续更新)
- 極座標下的histogram2d
- 腾讯云服务器上搭建mysql 如何使云数据库能外网访问
- Java 自定义标签
- 实战 :Spring MVC + 注解 +SqlServer 框架搭建及详解
- 黑盒测试和白盒测试
- ios获取所有相册的视频并播放