问题:当我向我的 hadoop 2.2.0 集群提交作业时,它没有显示在作业跟踪器中但作业成功完成。通过这个我可以看到输出并且它正在正确运行并在运行时打印输出。
我已经尝试了多个选项,但工作跟踪器没有看到该工作。如果我使用 2.2.0 hadoop 运行流作业,它会显示在任务跟踪器中,但是当我通过 hadoop-client api 提交它时,它不会显示在作业跟踪器中。我在8088端口上查看ui界面验证作业
环境 OSX Mavericks、Java 1.6、Hadoop 2.2.0 单节点集群、Tomcat 7.0.47
代码
try {
configuration.set("fs.defaultFS", "hdfs://127.0.0.1:9000");
configuration.set("mapred.jobtracker.address", "localhost:9001");
Job job = createJob(configuration);
job.waitForCompletion(true);
} catch (Exception e) {
logger.log(Level.SEVERE, "Unable to execute job", e);
}
return null;
etc/hadoop/mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
</configuration>
etc/hadoop/core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/tmp/hadoop-${user.name}</value>
<description>A base for other temporary directories.</description>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
最佳答案
该问题的解决方案是使用 yarn 的额外配置选项配置作业。我错误地假设 java hadoop-client api 将使用配置目录中的配置选项。我能够通过使用 log4j.properties 为我的单元测试打开详细日志记录来诊断问题。它表明作业在本地运行,没有提交给 yarn 资源管理器。通过一些尝试和错误,我能够配置作业并将其提交给 yarn 资源管理器。
代码
try {
configuration.set("fs.defaultFS", "hdfs://127.0.0.1:9000");
configuration.set("mapreduce.jobtracker.address", "localhost:54311");
configuration.set("mapreduce.framework.name", "yarn");
configuration.set("yarn.resourcemanager.address", "localhost:8032");
Job job = createJob(configuration);
job.waitForCompletion(true);
} catch (Exception e) {
logger.log(Level.SEVERE, "Unable to execute job", e);
}
关于java - Hadoop 没有在作业跟踪器中显示我的作业,即使它正在运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21345022/