hadoop / emr如何存储键值对

时间:2013-05-04 22:55:32

标签: java hadoop amazon-web-services distributed-caching emr

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

或许我可以以某种方式使用另一个MapReduce作业将所有键值对组合成一个输出文件,然后将整个文件放入DistributedCache

请指教。谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

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