java - 使用 Java Apis 在 hadoop 中运行 Streaming 作业

标签 java hadoop hadoop-streaming

我是 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/

相关文章:

java - 当我尝试添加 mysql 连接器依赖项时出现错误

hadoop - 从 OLTP Mysql 使用 Hadoop Hive 制作 OLAP

python - 处理谷歌云中的多个对象

hadoop - 很少有 Hive 面试问题

python - 有没有办法在 Hadoop 管理 Web 界面中指定 mrjob 的作业标题?

java - 在 URLConnection 上使用 getInputStream() 时出现 ProtocolException

java - ListView 已停止

java - Unity Jenkins Android Gradle Task :mergeReleaseResources FAILED, 命令行工作正常

hadoop - HDP 从 HDP 当前版本升级到 2.6.4 失败 - 2.6.0.3

java - hadoop map reduce程序中的InstantiationException