Hadoop 教程的Task Side-Effect Files部分提到使用任务的“attemptid”作为唯一名称。如何在我的映射器或减速器中获取此尝试 ID?
问问题
8114 次
3 回答
11
如果您需要 hadoop 中的副作用文件的唯一 ID,您可以使用以下代码在作业中利用尝试唯一 ID:
public static String getAttemptId(Configuration conf) throws IllegalArgumentException
{
if (conf == null) {
throw new NullPointerException("conf is null");
}
String taskId = conf.get("mapred.task.id");
if (taskId == null) {
throw new IllegalArgumentException("Configutaion does not contain the property mapred.task.id");
}
String[] parts = taskId.split("_");
if (parts.length != 6 ||
!parts[0].equals("attempt") ||
(!"m".equals(parts[3]) && !"r".equals(parts[3]))) {
throw new IllegalArgumentException("TaskAttemptId string : " + taskId + " is not properly formed");
}
return parts[4] + "-" + parts[5];
}
于 2009-09-29T21:26:48.723 回答
10
使用新的 Hadoop API:
context.getTaskAttemptID().getTaskID().getId()
于 2013-06-25T23:11:52.487 回答
4
派对迟到了,但您可以使用TaskAttemptID
该类来解析mapred.task.id
属性。
就我而言,我想要数字尝试值本身并在我的映射器中使用以下内容:
int _attemptID;
@Override
public void configure(JobConf conf) {
TaskAttemptID attempt = TaskAttemptID.forName(conf.get("mapred.task.id"));
_attemptID = attempt.id();
}
于 2012-07-04T20:19:58.407 回答