1

我正在 EMR 上运行一系列MapReduce作业。但是,第 3 个MapReduce作业需要第 2 个MapReduce作业的数据输出,输出本质上是超过一百万个键值对(键和值都小于 1KB)。有没有一种好方法可以将此信息存储在与 EMR 相同的机器上的分布式存储中,以便后续作业可以访问该信息?我看了看DistributedCache,但它更多的是用于存储文件吗?我不确定 Hadoop 是否针对存储一百万个小文件进行了优化..

或者也许我可以以某种方式使用另一项MapReduce工作将所有键值对组合到一个输出文件中,然后将整个文件放入DistributedCache.

请指教。谢谢!

4

1 回答 1

0

通常,map reduce 作业的输出存储在 HDFS(或 S3)中。该作业的reducer 数量决定了输出文件的数量。你怎么会有一百万个小文件?你运行一百万个减速器吗?我不确定。

因此,如果您为您的第二个作业定义一个 reducer,您将自动得到一个输出文件,该文件将存储在 HDFS 中。您的第三份工作将能够访问和处理此文件作为输入。如果第二个作业需要多个减速器,您将有多个输出文件。100 万个 key-value 对,每个 key 和 value 为 1 KB,给你一个 < 2 GB 的文件。如果 HDFS 块大小为 64 MB,您最终会得到大小为 N*64 MB 的结果文件,这将允许第三个作业并行处理块(多个映射器)。

仅当需要在每个映射器DistributedCache中读取整个文件时才应使用。但是最大尺寸。2 GB 这是一个相当有缺陷的方法。

于 2013-05-05T19:46:13.297 回答