【问题标题】:Is there any way for a fully distributed Hadoop/MapReduce program to have its individual nodes be reading local input files?完全分布式的 Hadoop/MapReduce 程序有什么方法可以让其各个节点读取本地输入文件?
【发布时间】:2011-11-20 23:58:50
【问题描述】:

我正在尝试设置一个完全分布式的 Hadoop/MapReduce 实例,其中每个节点将在某些输入上运行一系列 C++ Hadoop 流式处理任务。但是我不想将所有输入任务都移到 HDFS 上——相反,我想看看是否有办法从每个节点的本地文件夹中读取输入数据。

有没有办法做到这一点?

编辑: 我想运行的 hadoop 命令示例类似于:

hadoop jar $HADOOP_STREAM/hadoop-streaming-0.20.203.0.jar \
            -mapper map_example \
            -input file:///data/ \
            -output /output/ \
            -reducer reducer_example \
            -file map_example \
            -file reducer_example 

在这种情况下,我的每个节点中存储的数据都在 /data/ 目录中,我希望输出到每个单独节点的 /output/ 目录中。 map_example 和 reducer_example 文件在所有节点本地可用。

我将如何实现一个 Hadoop 命令,如果它在主节点上运行,那么所有从节点本质上将在 x 个节点上运行相同的任务,从而在每个节点中生成一个本地输出文件(基于本地输入文件)?

谢谢

【问题讨论】:

    标签: hadoop mapreduce hadoop-streaming


    【解决方案1】:

    by this question 所述,这似乎是可能的。虽然我没有对此进行测试,但您似乎可以在conf/core-site.xml 中设置fs.default.name 以引用file URL 而不是HDFS URL。

    一些参考:

    【讨论】:

    • 嗨,埃米尔,感谢您提供这些资源。您可能无法回答这个问题,但您知道应该如何准确地设置 Hadoop/MapReduce,以便我可以有一个完全分布式的实例来运行基于本地输入文件的单个 Hadoop 流式传输任务吗?我已经用更详细的描述更新了我的问题。谢谢!
    • 我不知道。听起来确实有点像您实际上并不想要 MapReduce,只是分布式执行。为此,像fabric 这样的工具可能更合适。
    • 我决定稍微改变我的方法,我已经改变了我的实例,所以我基本上想运行 MapReduce 的完全分布式实例(例如,将所有节点的输出组合到 HDFS 上的一个文件中)除了在每个节点上本地找到我的输入文件的相同副本而不是上传到 HDFS 之外。我还没有找到成功的方法。
    【解决方案2】:

    这并不完全是一个 hadoop 解决方案,但您可以编写一个程序(比如 Python),该程序将分叉多个进程,这些进程将 ssh 到每个从属机器并运行 map reduce 代码。

    hadoop dfsadmin -report 允许您列出集群中的 ip。 您可以让每个进程 ssh 进入每个 ips 并运行映射器和化简器。

    *nix 中的 Map reduce 可以使用管道实现。

    cat <input> | c++ mapper | sort | c++ reducer > <output_location>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-25
      • 2013-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-10
      • 1970-01-01
      相关资源
      最近更新 更多