我是 hadoop 的新手,正在学习流式作业。 有人可以指导我如何通过 Java 代码运行 Streaming Jobs 吗? 提前致谢。
最佳答案
如果您想使用流式 API 运行 Java 代码,您可以直接将类名作为映射器和/或缩减器传递。像这样:
$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar \
-input myInputDirs \
-output myOutputDir \
-mapper com.something.MyMapper \
-reducer com.something.MyReducer
但是,如果您只想运行 Java 代码,我建议您使用常规 Java API 而不是使用 Hadoop 流,它更加灵活。
我不清楚你的问题是关于在流中运行 Java 代码,还是你想通过从 Java 调用它来启动流代码。我假设你想运行上面的 Java 代码,但如果它是另一个选项,你可以从 Java 启动一个子进程来运行命令行实用程序,例如:
String cmd = "/usr/bin/hadoop jar /path/to/hadoop-streaming.jar -input myinput -output myoutput -mapper mymapper.sh -reducer myreducer.sh";
String[] cmdSplit = cmd.split(" ");
ProcessBuilder pb = new ProcessBuilder(cmdSplit);
pb.start();
您也可以通过在类路径中添加 hadoop-streaming jar 并调用:
String cmd = "/usr/bin/hadoop jar /path/to/hadoop-streaming.jar -input myinput -output myoutput -mapper mymapper.sh -reducer myreducer.sh";
String[] cmdSplit = cmd.split(" ");
HadoopStreaming.main(cmdSplit);
关于java - 使用 Java Apis 在 hadoop 中运行 Streaming 作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14463169/