Hadoop:获取特定 MapReuce 任务的机器主机名
Hadoop: get Machine hostname for a particular MapReuce task
有什么方法可以通过编程方式为 task
的特定 attempt
获取 Machine hostname
吗?
在hadoop的jobracker WebUI
中显示相同的信息,如下所示:
以下是我目前所知道的实现此目的的方法:
// How to instantiate JobTracker ??
JobTracker tracker = (JobTracker) application.getAttribute("job.tracker");
JobID jobidObj = JobID.forName(jobid);
JobInProgress job = tracker.getJob(jobidObj);
TaskID tipidObj = TaskID.forName(tipid);
TaskInProgress tip = job.getTaskInProgress(tipidObj);
TaskStatus[] ts = tip.getTaskStatuses();
for (int i = 0; i < ts.length; i++) {
TaskStatus status = ts[i];
//get the attempt name
String taskTrackerName = status.getTaskTracker();
TaskTrackerStatus taskTracker = tracker.getTaskTracker(taskTrackerName);
//get the hostname
taskTracker.getHost();
}
这是我知道的获取主机名的唯一方法,但这些代码将永远无法工作,因为我无法通过任何方法实例化 JobTracker
。如果上面的代码没有解决办法,请告诉我是否还有其他方法。
根据 MAPREDUCE-2818 它看起来不像 public API 因为该信息已进入 MRv1。 JIRA 的解决方法是以编程方式请求 JobTracker UI 页面并从中解析主机名。
如果您改为使用 MRv2,则可以通过编程方式从 YARN REST API.
中获取任务尝试的主机名
有什么方法可以通过编程方式为 task
的特定 attempt
获取 Machine hostname
吗?
在hadoop的jobracker WebUI
中显示相同的信息,如下所示:
以下是我目前所知道的实现此目的的方法:
// How to instantiate JobTracker ??
JobTracker tracker = (JobTracker) application.getAttribute("job.tracker");
JobID jobidObj = JobID.forName(jobid);
JobInProgress job = tracker.getJob(jobidObj);
TaskID tipidObj = TaskID.forName(tipid);
TaskInProgress tip = job.getTaskInProgress(tipidObj);
TaskStatus[] ts = tip.getTaskStatuses();
for (int i = 0; i < ts.length; i++) {
TaskStatus status = ts[i];
//get the attempt name
String taskTrackerName = status.getTaskTracker();
TaskTrackerStatus taskTracker = tracker.getTaskTracker(taskTrackerName);
//get the hostname
taskTracker.getHost();
}
这是我知道的获取主机名的唯一方法,但这些代码将永远无法工作,因为我无法通过任何方法实例化 JobTracker
。如果上面的代码没有解决办法,请告诉我是否还有其他方法。
根据 MAPREDUCE-2818 它看起来不像 public API 因为该信息已进入 MRv1。 JIRA 的解决方法是以编程方式请求 JobTracker UI 页面并从中解析主机名。
如果您改为使用 MRv2,则可以通过编程方式从 YARN REST API.
中获取任务尝试的主机名