如何将相关任务返回到他们在Hadoop中运行的机器

时间:2013-11-06 14:53:50

标签: hadoop

我正在开发一个Hadoop项目(目前使用hadoop 1.2.1),我需要跟踪任务运行时信息以及哪些机器正在执行任务。我可以使用以下方法获得任务进度:

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

从这里我可以获得JobTracker并获得地图任务进度:

TaskReport[] mapTaskReports = tracker.getMapTaskReports();

但是现在我有任务报告,我不知道如何知道这些任务正在/正在运行的机器。是否有任何机器识别信息可以检索(机器名称,IP地址等)并且能够与这些任务报告相关联?

注意:我需要能够在作业仍在进行中进行此映射,因此我可以根据某些计算机是否为某些任务执行不良而做出决策。

编辑:我认为TaskTracker对象可能有我想要的东西,它的getHostName()方法,但我不知道如何获取它的实例。 TaskTracker构造函数接受一个JobConf对象,但它似乎没有指定它将从哪个机器获取它,因为运行该作业任务的每台机器都有自己的TaskTracker实例。

1 个答案:

答案 0 :(得分:1)

RunningJob有一个名为getTaskCompletionEvents()的API,它返回TaskCompletionEvent数组。

使用 TaskCompletionEvent我们可以知道Task Tracker的HTTP地址。

请尝试以下代码..这是示例代码..未经过测试

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