在我的映射器中,我想调用安装在HDFS外部的工作节点上的外部软件。这可能吗?这样做的最佳方式是什么?
据我所知,这可能会带来MapReduce的一些优势/可扩展性,但我想在HDFS中进行交互,并在我的映射器中调用已编译/安装的外部软件代码来处理一些数据。
答案 0 :(得分:5)
Mappers(和reducers)就像盒子上的任何其他进程一样 - 只要TaskTracker用户有权运行可执行文件,就没有问题。有几种方法可以调用外部进程,但由于我们已经使用Java,ProcessBuilder似乎是一个合乎逻辑的起点。
编辑:刚刚发现Hadoop明确有一个类用于此目的:http://hadoop.apache.org/common/docs/current/api/org/apache/hadoop/util/Shell.html
答案 1 :(得分:0)
这当然可行。您可能会发现最好使用Hadoop Streaming。正如它在该网站上所说:
Hadoop流媒体是Hadoop发行版附带的实用工具。该实用程序允许您使用任何可执行文件或脚本创建和运行map / reduce作为映射器和/或reducer。
我倾向于从Hadoop Streaming中的外部代码开始。根据您的语言,可能有很多关于如何在Streaming中使用它的好例子;一旦你进入你选择的语言,你通常可以根据需要将数据输出到另一个程序。我已经用不同语言编写了几层程序,没有额外的工作,而不是在普通的Linux机器上运行它,除了让外层使用Hadoop Streaming。