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.

中获取任务尝试的主机名