如何将任务关联回hadoop中运行它们的机器

jvidinwx  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(354)

我正在从事一个hadoop项目(目前使用hadoop1.2.1),在这个项目中,我需要跟踪任务运行时信息以及哪些机器能够很好地执行任务。我可以通过以下方式获得任务进度:

RunningJob runningJob = JobClient.runJob(conf);
JobStatus jobStatus = runningJob.getJobStatus();

从这里我可以得到一个jobtracker和Map任务进度:

TaskReport[] mapTaskReports = tracker.getMapTaskReports();

但是现在我有了任务报告,我不知道如何知道这些任务正在/曾经在哪些机器上运行。是否有任何机器识别信息,我可以检索(机器名称,ip地址等),并能够相关回这些任务报告?
注意:我需要能够在作业仍在进行的情况下进行此Map,这样我就可以根据某些机器是否在执行某些任务时表现不佳来做出决策。
edit:我认为tasktracker对象可能有我想要的gethostname()方法,但我不确定如何获取它的示例。tasktracker构造函数接收jobconf对象,但它似乎没有指定从哪台计算机获取它,因为为该作业运行任务的每台计算机都有自己的tasktracker示例。

u5rb5r59

u5rb5r591#

runningjob具有名为gettaskcompletionevents()的api,该api返回taskcompletionevent数组。
使用taskcompletionevent我们可以知道任务跟踪器的http地址。
请尝试下面的代码..这是示例代码..未测试

TaskCompletionEvent [] events =  runningJob.getTaskCompletionEvents (0); 
for (TaskCompletionEvent event: events) { 
        System.out.println(event.getTaskTrackerHttp()); // host:port format
}

相关问题