【问题标题】:Hadoop is not showing my job in the job tracker even though it is runningHadoop 没有在作业跟踪器中显示我的作业,即使它正在运行
【发布时间】:2015-02-13 02:39:54
【问题描述】:

问题:当我将作业提交到我的 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>

【问题讨论】:

    标签: java hadoop hadoop-streaming hadoop-yarn


    【解决方案1】:

    问题的解决方案是使用 yarn 的额外配置选项来配置作业。我错误地假设 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);
        }
    

    【讨论】:

    • 我不认为 mapreduce.job.tracker 是一个真正的 Hadoop 属性。
    • @amoe,它在 1.x 中。在 2.x 中替换为 mapreduce.jobtracker.address
    • @AdrieanKhisbe,不是想学究气,但mapreduce.job.tracker 似乎根本不存在。尝试将其放入谷歌(用引号引起来)。
    • 我的错,似乎我的大脑在阅读您的评论时掉了uce
    • 我修好了,我确定这是我打错了。它起作用的原因可能是因为我也在从 xml 配置文件中读取配置。
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 我正在使用 mrv2 api。我也在检查localhost:8088/cluster/apps/SUBMITTED 的资源管理器。这是我没有看到我的作业正在使用 mrv2 api 提交的地方,但是如果我提交一个简单的流式作业,它会显示在提交的应用程序中。我想问题是在 MRv2 中我如何查看我的工作,工作历史。我要去阅读纱线文档。感谢您的反馈。
    • 我也有同样的问题,您找到问题的解决方案了吗? @ChrisHinshaw
    • @Raghav 如果您阅读我的回答,它会告诉您到底发生了什么。检查我发布的答案。
    猜你喜欢
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 2011-11-20
    • 2018-04-18
    • 2016-09-29
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多