在Hadoop Streaming期间减少Map任务的数量

时间:2014-11-11 10:09:42

标签: hadoop

我有一个包含3072个文件的文件夹,每个文件大约50mb。我正在使用Hadoop Streaming运行一个Python脚本并提取一些数据。

在单个文件上,脚本不会超过2秒。但是,在具有40 m1.large任务节点和3072个文件的EMR群集上运行此操作需要12分钟。

Hadoop流媒体可以做到这一点:

14/11/11 09:58:51 INFO mapred.FileInputFormat: Total input paths to process : 3072
14/11/11 09:58:52 INFO mapreduce.JobSubmitter: number of splits:3072

因此创建了3072个地图任务。

当然,Map Reduce开销也会发挥作用。从一些初步的研究来看,如果地图任务花费的时间少于30-40秒,那么效率非常低。

我可以做些什么来减少地图任务的数量?理想情况下,如果每个任务处理大约10-20个文件,它将大大减少开销。

我试过玩块大小;但由于文件大小都在50mb左右,它们已经在单独的块中,并且增加块大小没有区别。

2 个答案:

答案 0 :(得分:0)

不幸的是你做不到。给定作业的映射任务数由输入拆分数驱动。对于每个输入拆分,将生成一个映射任务。因此,在mapreduce作业的生命周期中,map任务的数量等于输入拆分的数量。

答案 1 :(得分:0)

mapred.min.split.size将指定映射器要处理的最小分割大小。

因此,增加分割大小应该减少映射器的数量。

查看链接 Behavior of the parameter "mapred.min.split.size" in HDFS