【问题标题】:hadoop/emr how to store key-value pairshadoop/emr 如何存储键值对
【发布时间】:2013-05-06 03:46:13
【问题描述】:

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

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

请指教。谢谢!

【问题讨论】:

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


    【解决方案1】:

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

    因此,如果您为第二个作业定义一个 reducer,您将自动得到一个输出文件,该文件将存储在 HDFS 中。您的第三份工作将能够访问和处理此文件作为输入。如果第二个作业需要多个减速器,您将有多个输出文件。 100 万个 key-value 对,每个 key 和 value 为 1 KB,给你一个

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

    【讨论】:

    • 感谢您的回答,我们最终使用了DistributedCache,但是在下一个setUp(context)setUp(context) 方法中构造了HashMap MapReduce 这样每个节点只需构造一次映射:]
    • @Jin 不客气。您可能还想尝试为多个映射器重用 JVM,以便您只为 N 个映射器读取一次哈希映射。见stackoverflow.com/questions/4877691/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多