问题:当我向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;
等/的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>
等/ hadoop的/芯-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>
答案 0 :(得分:6)
该问题的解决方案是使用纱线的额外配置选项配置作业。我做了错误的假设,java hadoop-client api将使用配置目录中的配置选项。我能够通过使用log4j.properties为我的单元测试打开详细日志记录来诊断问题。它表明这些工作是在本地运行而没有提交给纱线资源经理。通过一些试验和错误,我能够配置作业并将其提交给纱线资源管理器。
<强>代码强>
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);
}
答案 1 :(得分:4)
我看到你正在使用Hadoop 2.2.0。您使用的是MRv1还是MRv2? MRV2(YARN)的守护进程是不同的。虽然您可能会看到JobTracker UI的占位符页面,但MRv2没有JobTracker。
ResourceManager Web UI应显示已提交的作业。 ResourceManager的默认Web URL为http://&lt; ResourcemanagerHost &gt;:8088
将ResourceManagerHost替换为运行资源管理器的节点的IP地址。
了解有关YARN架构的更多信息