独立处理大量小文件

Processing HUGE number of small files independently

任务是独立处理大量(大约 10,000,000)个小文件(每个大约 1MB)(即处理文件 F1 的结果独立于处理 F2 的结果)。

有人为我的任务建议使用 Map-Reduce(在 Amazon-EMR Hadoop 上)。但是,我对MR有严重的怀疑。

原因是在我的案例中,处理文件是独立的。据我了解 MR,当输出依赖于许多单独的文件(for example counting the frequency of each word, given many documents,因为一个词可能包含在输入文件的任何文档中)时,它的效果最好。但就我而言,我只需要很多独立 CPUs/Cores。

我想知道您对此有何建议。


旁注:还有一个问题是 MR 最适合 "huge files rather than huge number of small size"。 Although there seems to be solutions for that. 所以我暂时忽略它。

可以根据您的需要使用 map reduce。在 MapReduce 中,有两个阶段 MapReduce,但是 reduce 阶段不是必须的,根据您的情况,您可以编写一个 map-only MapReduce 作业,并且单个文件的所有计算都应放入自定义的 Map 函数中。

但是,我还没有在一次作业中处理过如此大量的文件,不知道它的效率。亲自尝试,并与我们分享:)

这很容易做到。在这种情况下——MR 作业的数据通常是文件列表(而不是文件本身)。所以提交给 Hadoop 的数据的大小是 10M 文件名的大小——最多是几个演出。

使用 MR 将文件列表拆分为更小的片段(多少可以通过各种选项控制)。然后每个映射器得到一个文件列表。它一次可以处理一个文件并生成输出。

(首先,我建议使用 Qubole(我是创始人)而不是 EMR,因为它可以通过自动缩放和现场集成为您节省大量资金)。