performance - 在 Hadoop 中提高 MapReduce 作业性能的技巧

标签 performance hadoop mapreduce hadoop2

我有 100 个映射器和 1 个 reducer 在工作中运行。如何提高工作绩效?

据我了解:combiner的使用可以在很大程度上提高性能。但是我们还需要配置什么来提高作业性能?

最佳答案

由于此问题中的数据有限(输入文件大小、HDFS block 大小、平均 map 处理时间、集群中的 Mapper 槽数和 Reduce 槽数等),我们无法提供提示。

但是有一些通用准则可以提高性能。

  1. 如果每项任务花费的时间少于30-40 秒,则 reduce task 数量
  2. 如果作业的输入超过 1TB,请考虑将输入数据集的 block 大小增加到 256M 甚至 512M,这样任务的数量就会变少.
  3. 只要每个任务至少运行 30-40 秒,将映射器任务的数量增加到集群中映射器插槽数量的某个倍数
  4. 每个作业的 reduce 任务数应等于或略小于集群中 reduce 插槽的数量。

更多提示:

  1. 使用正确的诊断工具正确配置集群
  2. 将中间数据写入磁盘时使用压缩
  3. 根据上述提示调整 Map 和 Reduce 任务的数量
  4. 在适当的地方合并Combiner
  5. 使用最合适的数据类型来呈现输出(当输出值的范围在Integer范围内时,不要使用LongWritableIntWritable 在这种情况下是正确的选择)
  6. 重用可写
  7. 拥有正确的分析工具

看看这个cloudera有关更多提示的文章。

关于performance - 在 Hadoop 中提高 MapReduce 作业性能的技巧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34241198/

相关文章:

python - 卷积神经网络性能的奇怪模式

c++ - 在 Linux 上增加文件需要任何费用吗?

存储和返回 id 的 MySQL 性能

hadoop - 如何在 Hive 中获取前一天的日期

java - 将可写对象添加到 Hadoop 配置

java - 具有多个文件并杀死其中映射器的Hadoop Wordcount示例

hadoop - map 减少字数示例

laravel - 在 Laravel 中将数据从 SQL 记录到 Redis

java - 我如何在hadoop中为其各自的输入文件生成不同的输出文件

hadoop - 将数据帧写入 Phoenix