1

我正在研究一个 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 实例。

4

1 回答 1

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
}
于 2013-11-06T16:35:24.373 回答