我正在尝试使用 jobId 从Hadoop 2.6.0
群集中获取当前正在运行的作业。
我输入了当前正在运行的Hadoop作业的jobId。使用RunningJob对象,我想获取有关Hadoop作业的详细信息
我正在使用Hadoop 2.x Java API。
为此,我使用了以下代码:
JobID jobID = JobID.forName(jobId);
Configuration conf = new Configuration();
JobClient client = new JobClient(new InetSocketAddress(ip,conf));
RunningJob job = client.getJob(jobId);
如果作业当前处于RUNNING
阶段,则getJob()
执行时间过长。
我无法理解为什么这需要花费太多时间来获取RunningJob对象。
我在Hadoop 1.1.2
版本中尝试过相同的版本,但我没有遇到过这个问题。在这种情况下,我使用了Hadoop 1.x Java API。
答案 0 :(得分:0)
我今天也有同样的问题。 Hadoop的JobClient需要3个必须参数来跟踪你的纱线作业。
<强> 1。 yarn.resourcemanager.address
<强> 2。 mapreduce.jobhistory.address 强>
第3。 mapreduce.framework.name 强>
应该按照以下方式调用它来创建jobClient
Configuration conf = new Configuration();
conf.set("mapreduce.framework.name", "yarn");
conf.set("yarn.resourcemanager.address",jobTrackerIp);
conf.set("mapreduce.jobhistory.address",jobHistoryIp);
JobClient client = new JobClient(conf);
一旦以这种方式创建它,jobClient就可以使用了。它们抑制了后端的一些错误并使用了重试逻辑。这就是我们无法在代码中看到任何错误的原因。