【发布时间】: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