【问题标题】:How to make MapReduce work with HDFS如何使 MapReduce 与 HDFS 一起工作
【发布时间】:2014-12-01 11:32:52
【问题描述】:

这听起来像是一个愚蠢的问题。 我可能会写一个 MR 代码,可以将输入和输出作为 HDFS 位置,然后我真的不需要担心 hadoop/MR 的并行计算能力。 (如果我在这里错了,请纠正我)。

但是,如果我的输入不是 HDFS 位置,则表示我将 MongoDB 数据作为输入 - mongodb://localhost:27017/mongo_hadoop.messages 并运行我的映射器和缩减器并将数据存储回 mongodb,HDFS 将如何进入画面。我的意思是如何确定 1 GB 或任何大小的大文件首先分布在 HDFS 上,然后在其上进行并行计算? 是这个直接 URI 不会分发数据,我需要取 BSON 文件,将其加载到 HDFS 上,然后将 HDFS 路径作为输入提供给 MR,还是框架足够聪明,可以自己完成?

如果上述问题太愚蠢或根本没有任何意义,我很抱歉。我对大数据真的很陌生,但很高兴能进入这个领域。

谢谢。

【问题讨论】:

    标签: mongodb hadoop mapreduce


    【解决方案1】:

    您正在描述DBInputFormat。这是一种从外部数据库读取拆分的输入格式。 HDFS 仅参与设置作业,但不参与实际输入。还有一个DBOutputFormat。对于像DBInputFormat 这样的输入,拆分是合乎逻辑的,例如。键范围。

    阅读Database Access with Apache Hadoop了解详细说明。

    【讨论】:

    • 感谢您分享的精彩链接。另外,我将我的问题重新表述为“只有当 MR 作业在 hdfs 文件输入上时才会出现数据节点上的 hdfs 复制和分发,或者当输入来自本地文件系统或 URL 时 hdfs 会出现”
    • 如果输入与 HDFS 无关,则 HDFS 分布对映射阶段没有任何作用。如果集群由 HDFS 支持,那么 HDFS 将在启动作业中扮演次要角色(jar 和配置被复制到 HDFS,从那里“本地化”到运行任务的节点)。 HDFS可能在减少输出或中间阶段(例如多阶段 MR 作业)中发挥作用。
    【解决方案2】:

    抱歉,我不确定 MongoDb。

    如果你只是想知道,如果我们使用的数据源是一个表,那么拆分是如何发生的,那么这是我在 MapRed 与 HBase 一起工作时的答案。

    我们将使用 TableInputFormat 在 MapRed 作业中使用 Hbase 表。

    来自http://hbase.apache.org/book.html#hbase.mapreduce.classpath

    7.7。地图任务拆分 7.7.1.默认 HBase MapReduce 拆分器

    当 TableInputFormat 用于在 MapReduce 作业中获取 HBase 表时,其拆分器将为表的每个区域创建一个映射任务。因此,如果表中有 100 个区域,则该作业将有 100 个映射任务 - 无论在 Scan 中选择了多少列族。

    7.7.2。自定义拆分器

    对于那些对实现自定义拆分器感兴趣的人,请参阅 TableInputFormatBase 中的 getSplits 方法。这就是地图任务分配的逻辑所在。

    【讨论】:

      【解决方案3】:

      这是个好问题,不傻。

      1.

      “mongodb://localhost:27017/mongo_hadoop.messages 并运行我的映射器和reducers 并将数据存储回mongodb,HDFS 将如何出现。”

      在这种情况下,你不需要考虑hdfs。你不需要做任何与 hdf 相关的事情。就像写一个多线程应用程序,每个线程向mongodb写入数据。

      其实hdfs是独立于map-reduce的,map-reduce也是独立于hdfs的。因此,您可以根据需要单独或一起使用它们。

      2. 如果你想输入/输出 db 到 map-reduce,你可以考虑 DBInputFormat,但这是另一个问题。

      现在,hadoop DBInputFormat 只支持 JDBC。我不确定是否有一些 mongodb 版本的 DBInputFormat。也许你可以搜索它或自己实现它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-02
        • 2021-12-19
        • 2012-05-29
        • 2018-05-17
        • 2014-08-16
        • 2012-05-25
        相关资源
        最近更新 更多