【问题标题】:Running Hadoop MapReduce, is it possible to call external executables outside of HDFS运行 Hadoop MapReduce,是否可以在 HDFS 之外调用外部可执行文件
【发布时间】:2011-09-03 04:52:36
【问题描述】:

在我的映射器中,我想调用安装在 HDFS 之外的工作节点上的外部软件。这可能吗?最好的方法是什么?

我知道这可能会剥夺 MapReduce 的一些优势/可扩展性,但我想在 HDFS 中进行交互,并在我的映射器中调用已编译/安装的外部软件代码来处理一些数据。

【问题讨论】:

    标签: hadoop mapreduce hdfs


    【解决方案1】:

    Mapper(和reducer)就像盒子上的任何其他进程一样——只要TaskTracker用户有权运行可执行文件,这样做没有问题。有几种方法可以调用外部进程,但由于我们已经使用 Java,ProcessBuilder 似乎是一个合乎逻辑的起点。

    编辑:刚刚发现 Hadoop 有一个明确用于此目的的类:http://hadoop.apache.org/common/docs/current/api/org/apache/hadoop/util/Shell.html

    【讨论】:

    • 补充一点:Shell 是包可见的,如果没有在包中就不能使用它们。
    • java中的Shell类会调用HDFS外节点上的进程吗?
    • @chris 谢谢 - 这行得通!你知道如何设置TaskTracker的用户权限吗?
    • TaskTracker 必须以普通 linux 用户身份运行。在我的集群中,它通常是它自己的用户(hadoop 用户或类似用户)。您只需要授予该用户执行您想做的事情的权限。
    • 提供的链接已失效。有其他选择吗?
    【解决方案2】:

    这当然是可行的。您可能会发现最好使用Hadoop Streaming。正如该网站上所说:

    Hadoop 流是 Hadoop 发行版附带的实用程序。该实用程序允许您使用任何可执行文件或脚本作为映射器和/或减速器来创建和运行映射/缩减作业。

    我倾向于从 Hadoop Streaming 内部的外部代码开始。根据您的语言,可能有很多很好的例子来说明如何在流式传输中使用它;一旦您进入您选择的语言,如果需要,您通常可以将数据输出到另一个程序。除了让外层与 Hadoop Streaming 一起工作之外,我已经让不同语言的几层程序运行得很好,而无需额外的努力,就像我在普通 Linux 机器上运行它一样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-21
      • 2016-06-20
      • 2010-12-21
      • 2012-10-24
      相关资源
      最近更新 更多