我有 100 个映射器和 1 个 reducer 在工作中运行。如何提高工作绩效?
据我了解:combiner的使用可以在很大程度上提高性能。但是我们还需要配置什么来提高作业性能?
最佳答案
由于此问题中的数据有限(输入文件大小、HDFS block 大小、平均 map 处理时间、集群中的 Mapper 槽数和 Reduce 槽数等),我们无法提供提示。
但是有一些通用准则可以提高性能。
- 如果每项任务花费的时间少于30-40 秒,则 reduce task 数量
- 如果作业的输入超过 1TB,请考虑将输入数据集的 block 大小增加到 256M 甚至 512M,这样任务的数量就会变少.
- 只要每个任务至少运行 30-40 秒,将映射器任务的数量增加到集群中映射器插槽数量的某个倍数
- 每个作业的 reduce 任务数应等于或略小于集群中 reduce 插槽的数量。
更多提示:
- 使用正确的诊断工具正确配置集群
- 将中间数据写入磁盘时使用压缩
- 根据上述提示调整 Map 和 Reduce 任务的数量
- 在适当的地方合并Combiner
- 使用最合适的数据类型来呈现输出(当输出值的范围在
Integer
范围内时,不要使用LongWritable
。IntWritable
在这种情况下是正确的选择) - 重用
可写
- 拥有正确的分析工具
看看这个cloudera有关更多提示的文章。
关于performance - 在 Hadoop 中提高 MapReduce 作业性能的技巧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34241198/