完全分布式的Hadoop / MapReduce程序有没有办法让它的各个节点读取本地输入文件?

时间:2011-11-20 23:58:50

标签: hadoop mapreduce hadoop-streaming

我正在尝试建立一个完全分布式的Hadoop / MapReduce实例,其中每个节点将在某些输入上运行一系列C ++ Hadoop Streaming任务。但是我不想将所有输入任务移到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个节点上运行相同的任务,从而在每个节点中生成本地输出文件(基于本地输入文件)?

由于

2 个答案:

答案 0 :(得分:1)

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

一些参考:

答案 1 :(得分:0)

这不是一个hadoop解决方案,但是你可以编写一个程序(比如说Python),它会分叉多个进程,这些进程将进入每个从属机器并运行map reduce代码。

hadoop dfsadmin -report 允许您列出群集中的ips。 您可以将每个进程ssh放入每个ips中并运行mapper和reducer。

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

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