加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Shuffle及优化

(2020-05-19 11:14:59)
标签:

大数据高频面试题

大数据

hadoop

shuffle及优化

分类: 大数据学科

1Shuffle过程

MapReduce详细工作流程(一)

Shuffle及优化

MapReduce详细工作流程(二)

Shuffle及优化

2、优化

1Map阶段

1)增大环形缓冲区大小。由100m扩大到200m

2)增大环形缓冲区溢写的比例。由80%扩大到90%

3)减少对溢写文件的merge次数。(10个文件,一次20merge

4)不影响实际业务的前提下,采用Combiner提前合并,减少 I/O

2Reduce阶段

1)合理设置MapReduce数:两个都不能设置太少,也不能设置太多。太少,会导致Task等待,延长处理时间;太多,会导致 MapReduce任务间竞争资源,造成处理超时等错误。

2)设置MapReduce共存:调整slowstart.completedmaps参数,使Map运行到一定程度后,Reduce也开始运行,减少Reduce的等待时间。

3)规避使用Reduce,因为Reduce在用于连接数据集的时候将会产生大量的网络消耗。

4)增加每个ReduceMap中拿数据的并行数

5)集群性能可以的前提下,增大Reduce端存储数据内存的大小。

3IO传输

采用数据压缩的方式,减少网络IO的的时间。安装SnappyLZOP压缩编码器。

压缩:

1map输入端主要考虑数据量大小和切片,支持切片的有Bzip2LZO。注意:LZO要想支持切片必须创建索引;

2map输出端主要考虑速度,速度快的snappyLZO

3reduce输出端主要看具体需求,例如作为下一个mr输入需要考虑切片,永久保存考虑压缩率比较大的gzip

4)整体

1NodeManager默认内存8G,需要根据服务器实际配置灵活调整,例如128G内存,配置为100G内存左右,yarn.nodemanager.resource.memory-mb

2)单任务默认内存8G,需要根据该任务的数据量灵活调整,例如128m数据,配置1G内存,yarn.scheduler.maximum-allocation-mb

3mapreduce.map.memory.mb :控制分配给MapTask内存上限,如果超过会kill掉进程(报:Container is running beyond physical memory limits. Current usage:565MB of512MB physical memory usedKilling Container)。默认内存大小为1G,如果数据量是128m,正常不需要调整内存;如果数据量大于128m,可以增加MapTask内存,最大可以增加到4-5g

4mapreduce.reduce.memory.mb控制分配给ReduceTask内存上限。默认内存大小为1G,如果数据量是128m,正常不需要调整内存;如果数据量大于128m,可以增加ReduceTask内存大小为4-5g

5mapreduce.map.java.opts:控制MapTask堆内存大小。(如果内存不够,报:java.lang.OutOfMemoryError

6mapreduce.reduce.java.opts:控制ReduceTask堆内存大小。(如果内存不够,报:java.lang.OutOfMemoryError

7)可以增加MapTaskCPU核数,增加ReduceTaskCPU核数

8)增加每个ContainerCPU核数和内存大小

9)在hdfs-site.xml文件中配置多目录

10NameNode有一个工作线程池,用来处理不同DataNode的并发心跳以及客户端并发的元数据操作。dfs.namenode.handler.count=20 * log2(Cluster Size),比如集群规模为10台时,此参数设置为60

0

阅读 收藏 喜欢 打印举报/Report
后一篇:Yarn工作机制
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有