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