1

我正在尝试在 Amazon EC2 中使用 whirr 配置 Yarn 2.2.0。但是我遇到了一些问题。我已经修改了 whirr 服务以支持 yarn 2.2.0。结果,我能够启动作业并成功运行它们。但是我在跟踪工作进度方面遇到了问题。

 mapreduce.Job (Job.java:monitorAndPrintJob(1317)) - Running job: job_1397996350238_0001
2014-04-20 21:57:24,544 INFO  [main] mapred.ClientServiceDelegate (ClientServiceDelegate.java:getProxy(270)) - Application state is completed. FinalApplicationStatus=SUCCEEDED. Redirecting to job history server
java.io.IOException: Job status not available 
    at org.apache.hadoop.mapreduce.Job.updateStatus(Job.java:322)
    at org.apache.hadoop.mapreduce.Job.isComplete(Job.java:599)
    at org.apache.hadoop.mapreduce.Job.monitorAndPrintJob(Job.java:1327)
    at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1289)
    at com.zetaris.hadoop.seek.preprocess.PreProcessorDriver.executeJobs(PreProcessorDriver.java:112)
    at com.zetaris.hadoop.seek.JobToJobMatchingDriver.executePreProcessJob(JobToJobMatchingDriver.java:143)
    at com.zetaris.hadoop.seek.JobToJobMatchingDriver.executeJobs(JobToJobMatchingDriver.java:78)
    at com.zetaris.hadoop.seek.JobToJobMatchingDriver.executeJobs(JobToJobMatchingDriver.java:43)
    at com.zetaris.hadoop.seek.JobToJobMatchingDriver.main(JobToJobMatchingDriver.java:56)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:212

我试过 Debugginh 问题出在 ApplicationMaster 上。它有一个主机名和 rpc 端口,其中主机名是内部主机名,只能从亚马逊网络内解析。理想情况下,它应该是一个公开的 Amazon DN 名称。但是我还不能设置它。我尝试设置参数,例如

yarn.nodemanager.hostname yarn.nodemanager.address

但我找不到 ApplicationMaster 的主机名或端口有任何变化,它们仍然是亚马逊私有的内部主机名。我有什么遗漏吗。或者我应该更改所有节点管理器节点中的 /etc/hosts 以便节点管理器从公共地址开始。但这将是一个矫枉过正的权利。或者有什么方法可以配置 ApplicationMaster 以获取公共 IP。所以我可以远程跟踪进度

我这样做是因为我需要远程提交作业。我不愿意妥协这个功能。任何指导我的人

我成功配置了历史服务器,然后我可以从远程客户端访问。我使用配置来做到这一点。

mapreduce.jobhistory.webapp.address

当我调试时,我发现

 MRClientProtocol MRClientProxy = null;
      try {
        MRClientProxy = getProxy();
        return methodOb.invoke(MRClientProxy, args);
      } catch (InvocationTargetException e) {
        // Will not throw out YarnException anymore
        LOG.debug("Failed to contact AM/History for job " + jobId + 
            " retrying..", e.getTargetException());
        // Force reconnection by setting the proxy to null.
        realProxy = null;

由于私有地址,代理无法连接。上面的代码片段来自 ClientServiceDelegate

4

3 回答 3

0

我能够避免这个问题。而不是解决这个问题。问题在于云环境之外的ip解析。

最初,我尝试更新 whirr-yarn 源以使用公共 ip 进行配置,而不是私有 ip。但仍然存在问题。所以我放弃了任务。

我最终做的是从云环境本身开始工作。而不是来自云基础架构之外的主机。希望有人找到更好的方法。

于 2014-06-25T02:10:15.303 回答
0

我有同样的问题。通过在中添加以下行来解决mapred-site.yml。它将您的暂存目录从默认的 tmp 目录移动到您有权限的主目录。

  <property>
    <name>yarn.app.mapreduce.am.staging-dir</name>
    <value>/user</value>
  </property>

除此之外,还需要在 hdfs 上创建一个历史目录:

hdfs dfs -mkdir -p /user/history
hdfs dfs -chmod -R 1777 /user/history
hdfs dfs -chown mapred:hadoop /user/history

我发现这个链接对于配置 Hadoop 集群非常有用。

于 2016-12-09T16:24:49.783 回答
-1
conf.set("mapreduce.jobhistory.address", "hadoop3.hwdomain:10020");
conf.set("mapreduce.jobhistory.intermediate-done-dir", "/mr-history/tmp");
conf.set("mapreduce.jobhistory.done-dir", "/mr-history/done");
于 2014-08-14T03:32:23.353 回答