2

我可以从终端成功启动 hadoop 流式传输作业,但我正在寻找通过 api、eclipse 或其他方式开始处理作业的方法。

我发现的最接近的是这篇文章https://stackoverflow.com/questions/11564463/remotely-execute-hadoop-streaming-job但它没有答案!

欢迎任何想法或建议。

4

3 回答 3

2

有趣的问题,我找到了一种方法来做到这一点,希望这对你也有帮助。

第一种方法应该适用于 Hadoop 0.22:

Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://xxxxx:9000");
conf.set("mapred.job.tracker", "hdfs://xxxxx:9001");
StreamJob sj = new StreamJob();
try {
    ToolRunner.run(conf, sj, new String[] { 
                "-D", "stream.tmpdir=c:\\",
                "-mapper", "/path/to/mapper.py",
                "-reducer", "/path/to/reducer.py", "-input",
                "/path/to/input", "-output",
                "/path/to/output" });
} catch (Exception e) {
    e.printStackTrace();
}

我还发现了这个你应该能够运行的Java 包装器。

于 2013-01-10T00:27:10.083 回答
1

看看Apache Oozie——一旦你通过 XML 定义了你的工作,你就可以通过一个 Http POST 向 oozie 服务器启动一个工作

于 2013-01-10T02:31:35.963 回答
0

当 Hadoop 流作业运行为

hadoop jar /home/training/Installations/hadoop-1.0.3/contrib/streaming/hadoop-streaming-1.0.3.jar -input input4 -output output4 -mapper /home/training/Code/Streaming/max_temperature_map.rb -reducer /home/training/Code/Streaming/max_temperature_reduce.rb

然后执行org.apache.hadoop.streaming.HadoopStreaming。此类在 hadoop-streaming-1.0.3.jar 的 MANIFEST.MF 中定义。检查org.apache.hadoop.streaming.HadoopStreaming java 类中的代码以了解 API 详细信息。

于 2013-01-11T16:22:02.527 回答