即使Hadoop正在运行,Hadoop也没有在作业跟踪器中显示我的工作

问题:当我向hadoop 2.2.0群集提交作业时,它不会显示在作业跟踪器中, 但作业成功完成。 通过这个我可以看到输出,它正确运行并在运行时打印输出。

我尝试了多种选择,但是求职者没有看到这份工作。 如果我使用2.2.0 hadoop运行流媒体作业,它会显示在任务跟踪器中,但是当我通过hadoop-client api提交它时,它不会显示在作业跟踪器中。 我正在查看端口8088上的ui接口以validation该作业

环境 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中

   mapreduce.framework.name yarn   mapred.job.tracker localhost:9001   

等/ hadoop的/芯-site.xml中

   hadoop.tmp.dir /tmp/hadoop-${user.name} A base for other temporary directories.   fs.default.name hdfs://localhost:9000   

解决问题的方法是使用纱线的额外配置选项配置作业。 我做了错误的假设,java hadoop-client api将使用配置目录中的配置选项。 我能够通过使用log4j.properties为我的unit testing打开详细日志记录来诊断问题。 它表明这些工作是在本地运行而没有提交给纱线资源经理。 通过一些试验和错误,我能够配置作业并将其提交给纱线资源管理器。

  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); } 

我看到你正在使用Hadoop 2.2.0。 您使用的是MRv1还是MRv2? MRv2(YARN)的守护进程是不同的。 虽然您可能会看到JobTracker UI的占位符页面,但MRv2没有JobTracker。

ResourceManager Web UI应显示已提交的作业。 ResourceManager的默认Web URL是http:// < ResourcemanagerHost >:8088

将ResourceManagerHost替换为运行资源管理器的节点的IP地址。

您可以在Apache Hadoop YARN上阅读有关YARN架构的更多信息