我正在开发一个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实例。
答案 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
}