복붙노트

[HADOOP] 하둡은 - 어떻게 mapred.JobConf에서 TASKID를 추출?

HADOOP

하둡은 - 어떻게 mapred.JobConf에서 TASKID를 추출?

그것은 * mapred * .JobConf에서 유효한 *의 맵리 듀스 * .TaskAttemptID을 만들 수 있습니까?

배경

나는 ExistingFileInputFormat에 대한 FileInputFormatAdapter를 작성해야합니다. 문제는 어댑터 mapred.InputFormat을 연장 할 필요가 기존 형식 mapreduce.InputFormat을 연장한다.

나는 내가 ExistingRecordReader를 인스턴스화 할 수 있도록하는 mapreduce.TaskAttemptContextImpl를 구축 할 필요가있다. 그러나, 나는 유효한 TaskID를 만들 수 없습니다 ... TASKID가 null로 나옵니다.

그래서 mapred.JobConf에서 등등 TASKID, 작업 ID를 얻을 수있는 방법.

어댑터의 getRecordReader에서 특히 내가 좋아하는 뭔가를 할 필요가 :

public org.apache.hadoop.mapred.RecordReader<NullWritable, MyWritable> getRecordReader(
        org.apache.hadoop.mapred.InputSplit split, JobConf job, Reporter reporter) throws IOException {

    SplitAdapter splitAdapter = (SplitAdapter) split;

    final Configuration conf = job;

    /*************************************************/
    //The problem is here, "mapred.task.id" is not in the conf
    /*************************************************/
    final TaskAttemptID taskId = TaskAttemptID.forName(conf.get("mapred.task.id"));

    final TaskAttemptContext context = new TaskAttemptContextImpl(conf, taskId);
    try {
        return new RecordReaderAdapter(new ExistingRecordReader(
                splitAdapter.getMapRedeuceSplit(),
                context));
    } catch (InterruptedException e) {
        throw new RuntimeException("Failed to create record-reader.", e);
    }
}

이 코드는 예외가 발생합니다 :

Caused by: java.lang.NullPointerException
    at org.apache.hadoop.mapreduce.task.TaskAttemptContextImpl.<init>(TaskAttemptContextImpl.java:44)
    at org.apache.hadoop.mapreduce.task.TaskAttemptContextImpl.<init>(TaskAttemptContextImpl.java:39)

슈퍼 (conf의, taskId.getJobID ()); ' 예외를 던지고, 대부분 TASKID가 null이기 때문이다.

해결법

  1. ==============================

    1.나는 HiveHbaseTableInputFormat을 통해보고 답을 발견했다. 내 솔루션은 하이브의 대상이되기 때문에,이 완벽하게 작동합니다.

    나는 HiveHbaseTableInputFormat을 통해보고 답을 발견했다. 내 솔루션은 하이브의 대상이되기 때문에,이 완벽하게 작동합니다.

     TaskAttemptContext tac = ShimLoader.getHadoopShims().newTaskAttemptContext(
            job.getConfiguration(), reporter);
    
  2. from https://stackoverflow.com/questions/28466554/hadoop-how-to-extract-a-taskid-from-mapred-jobconf by cc-by-sa and MIT license