如何强制hadoop在每个映射中处理更多数据

如何强制hadoop在每个映射中处理更多数据,hadoop,mapreduce,Hadoop,Mapreduce,我有一项工作进展非常缓慢,因为我认为hadoop为数据的大小创建了太多的映射任务。我在一些网站上读到,用更少的地图来处理更大的数据块是很有效的——有没有办法强制这样做?谢谢有两种可能性: 增加90gb数据的块大小,将其设置为128m或更大将使地图任务“更有效” 使用并将块批处理到您认为合适的大小 第一种解决方案要求您重写数据以更改块大小,第二种解决方案可以嵌入到您的作业中。许多映射确实会对性能产生严重影响,因为映射任务启动的开销为1到3秒,具体取决于您的设置和硬件 这里的主要设置是JVM重用(m

我有一项工作进展非常缓慢,因为我认为hadoop为数据的大小创建了太多的映射任务。我在一些网站上读到,用更少的地图来处理更大的数据块是很有效的——有没有办法强制这样做?谢谢

有两种可能性:

  • 增加90gb数据的块大小,将其设置为128m或更大将使地图任务“更有效”
  • 使用并将块批处理到您认为合适的大小

  • 第一种解决方案要求您重写数据以更改块大小,第二种解决方案可以嵌入到您的作业中。

    许多映射确实会对性能产生严重影响,因为映射任务启动的开销为1到3秒,具体取决于您的设置和硬件
    这里的主要设置是JVM重用(mapred.job.reuse.JVM.num.tasks)。将其设置为-1,您可能会得到性能的显著提升
    这个问题通常的根本原因是大量的小文件。这里讨论的是: 解决方案是将它们组织在一起

    如果您的文件确实很大,但可拆分-您可以增加块端,从而减少拆分数量,从而减少贴图数量

    增加拆分大小或使用CombineFileInputFormat将多个文件打包在一个拆分中,从而减少处理数据所需的贴图任务数量。

    ,这项工作似乎要为约90gb的数据制作约2400张地图。为什么您怀疑地图绘制者的数量是造成延迟的原因?你看过工作执行了吗?您是否使用vaidya或任何其他工具来分析数据的偏差或中间输出的大小?根据我的经验,瓶颈几乎总是归结为I/O或数据倾斜。映射器的数量不是一个因素(2400似乎与您拥有的数据集大小相当)。根据您的输入格式、文件大小(它们必须大于单个块)以及输入文件是否可拆分,您有第三个选项,即修改
    mapred.min.split.size
    mapred.max.split.size
    配置属性-这很可能会减少数据局部性,但可能会减慢作业速度