【问题标题】:Reducing number of Map tasks during Hadoop Streaming在 Hadoop Streaming 期间减少 Map 任务的数量
【发布时间】:2014-11-11 10:09:41
【问题描述】:

我有一个包含 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 左右,它们已经在单独的块中,增加块大小并没有什么不同。

【问题讨论】:

    标签: hadoop


    【解决方案1】:

    很遗憾,你不能。给定作业的映射任务数由输入拆分数驱动。对于每个输入拆分,都会生成一个地图任务。因此,在 mapreduce 作业的生命周期内,map 任务的数量等于输入拆分的数量。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2011-12-19
        • 1970-01-01
        • 1970-01-01
        • 2015-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多