我正在尝试使用Amazon EC2中的whirr配置Yarn 2.2.0。但是我遇到了一些问题。我修改了whirr服务以支持纱线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端口,其中主机名是内部主机名,只能从亚马逊网络中解析。理想情况下,它应该是公共的亚马逊DN名称。但是我还不能设置它。我尝试设置像
这样的参数yarn.nodemanager.hostname yarn.nodemanager.address
但我无法在ApplicationMaster的主机名或端口中找到任何更改,它们仍然是私有的亚马逊内部主机名。我错过了什么。或者我应该更改所有节点管理器节点中的/ etc / hosts,以便节点管理器以公共地址开头。 但这将是一个矫枉过正的权利。或者有任何方法我可以配置ApplicationMaster采取公共IP.So我可以远程跟踪进度
我这样做是因为我需要远程提交作业。我不愿意妥协此功能。在那里有人指导我
我成功配置了历史服务器,然后我可以从远程客户端访问。我使用配置来做到这一点。
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
答案 0 :(得分:0)
我能够避免这个问题。而不是解决这个问题。问题在于在云环境之外解析ip。
最初我尝试更新whirr-yarn源以使用公共ip进行配置而不是私有ip。但仍有问题。所以我放弃了任务。
我最终做的是从云环境本身开始工作。而不是来自云基础架构之外的主机。希望有人找到更好的方法。
答案 1 :(得分: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
我发现这个link对于配置Hadoop集群非常有用。
答案 2 :(得分:-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");