我有100个映射器和1个reducer在一个作业中运行。如何提高工作表现?
根据我的理解:使用组合器可以在很大程度上提高性能。但是,我们还需要配置什么来提高作业性能呢?
由于这个问题中的数据有限(输入文件大小、HDFS块大小、平均映射处理时间、Mapper插槽数和减少集群中的插槽数等),我们无法提供建议。
但是,有一些通用的指导方针可以提高性能。
- 如果每个任务花费的时间少于30-40秒,则减少任务数量
- 如果作业的输入量超过1TB,请考虑将输入数据集的块大小增加到256M,甚至512M以减少任务数量
- 只要每个任务至少运行30-40秒,就可以将映射器任务的数量增加到集群中映射器插槽数量的几倍
- 每个作业的减少任务数应等于或略小于集群中减少插槽的数量
更多提示:
- 使用正确的诊断工具正确配置群集
- 将中间数据写入磁盘时使用压缩
- 调整Map&按照以上提示减少任务
- 在适当的地方合并组合器
- 使用最适合的数据类型s渲染输出(当输出值的范围在
Integer
范围内时,不要使用LongWritable
。在这种情况下,IntWritable
是正确的选择) - 重用
Writables
- 拥有正确的评测工具
看看cloudera的这篇文章,了解更多提示。