如何完成相关任务';回到Hadoop中运行它们的机器

如何完成相关任务';回到Hadoop中运行它们的机器,hadoop,Hadoop,我正在从事一个Hadoop项目(目前使用的是Hadoop 1.2.1),在该项目中,我需要跟踪任务运行时信息以及哪些机器能够很好地执行任务。我可以通过以下方式获得任务进度: RunningJob runningJob = JobClient.runJob(conf); JobStatus jobStatus = runningJob.getJobStatus(); 从这里,我可以获得JobTracker并获得地图任务进度: TaskReport[] mapTaskReports = track

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

RunningJob runningJob = JobClient.runJob(conf);
JobStatus jobStatus = runningJob.getJobStatus();
从这里,我可以获得JobTracker并获得地图任务进度:

TaskReport[] mapTaskReports = tracker.getMapTaskReports();
但是现在我有了任务报告,我不知道如何知道这些任务正在/曾经在哪些机器上运行。是否有任何我可以检索的机器标识信息(机器名称、ip地址等),并能够关联回这些任务报告

注意:我需要能够在作业仍在进行的情况下进行映射,这样我就可以根据某些机器是否在执行某些任务时表现不佳做出决策


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

RunningJob有一个名为getTaskCompletionEvents()的API,该API返回TaskCompletionEvents数组

使用 TaskCompletionEvent我们可以知道任务跟踪器的HTTP地址

请尝试下面的代码。这是示例代码。未测试

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

RunningJob具有名为getTaskCompletionEvents()的API,该API返回TaskCompletionEvent数组

使用 TaskCompletionEvent我们可以知道任务跟踪器的HTTP地址

请尝试下面的代码。这是示例代码。未测试

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

这看起来很有希望,但这不只是给我已经完成的任务的结果吗?我还需要找到正在进行的任务的映射。这是与我想要做的最接近的答案。这看起来很有希望,但这不只是给我已经完成的任务的结果吗?我还需要找到正在进行的任务的映射。这是与我想做的最接近的答案。