Hadoop教程的Task Side-Effect Files部分提到使用任务的“尝试”作为唯一名称。如何在我的mapper或reducer中获取此尝试ID?
答案 0 :(得分: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];
}
答案 1 :(得分:10)
使用新的Hadoop API:
context.getTaskAttemptID().getTaskID().getId()
答案 2 :(得分:4)
晚会,但您可以使用TaskAttemptID
类来解析mapred.task.id
属性。
在我的情况下,我想要数字尝试值本身并在我的Mapper中使用以下内容:
int _attemptID;
@Override
public void configure(JobConf conf) {
TaskAttemptID attempt = TaskAttemptID.forName(conf.get("mapred.task.id"));
_attemptID = attempt.id();
}