복붙노트

[HADOOP] Hadoop에서는 프레임 워크가 Map 작업의 출력을 일반 Map-Reduce 응용 프로그램에 저장합니까?

HADOOP

Hadoop에서는 프레임 워크가 Map 작업의 출력을 일반 Map-Reduce 응용 프로그램에 저장합니까?

Reduce 작업에서 사용할 수 있기 전에 Map 작업의 출력이 디스크에 저장되는 위치를 찾으려고합니다.

참고 : - 사용 된 버전은 새 API가있는 Hadoop 0.20.204입니다.

예를 들어, Map 클래스의 map 메소드를 덮어 쓰는 경우 :

public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
    String line = value.toString();
    StringTokenizer tokenizer = new StringTokenizer(line);
    while (tokenizer.hasMoreTokens()) {
        word.set(tokenizer.nextToken());
        context.write(word, one);
    }

    // code that starts a new Job.

}

context.write ()가 어디서 데이터를 쓰는 지 알아내는 것에 흥미가 있습니다. 지금까지 내가 만난 :

FileOutputFormat.getWorkOutputPath(context);

어느 날 hdfs에서 다음 위치를 제공합니다 :

hdfs://localhost:9000/tmp/outputs/1/_temporary/_attempt_201112221334_0001_m_000000_0

다른 작업의 입력으로 사용하려고하면 다음과 같은 오류가 발생합니다.

org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist: hdfs://localhost:9000/tmp/outputs/1/_temporary/_attempt_201112221334_0001_m_000000_0

참고 : 작업은 매퍼에서 시작되므로 기술적으로 새 작업이 시작될 때 매퍼 작업이 출력하는 임시 폴더가 존재합니다. 그런 다음 입력 경로가 존재하지 않는다고 계속 말합니다.

임시 산출물을 쓸 곳에 대한 아이디어가 있습니까? 아니면 Map 및 Reduce 단계가있는 작업 중에 Map 작업의 출력을 찾을 수있는 위치는 무엇입니까?

해결법

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

    1.맵 축소 프레임 워크는 중간 출력을 HDFS가 아닌 로컬 디스크에 저장하므로 파일을 불필요하게 복제 할 수 있습니다.

    맵 축소 프레임 워크는 중간 출력을 HDFS가 아닌 로컬 디스크에 저장하므로 파일을 불필요하게 복제 할 수 있습니다.

  2. ==============================

    2.그래서, 나는 정말로 진행되고있는 것을 알아 냈습니다.

    그래서, 나는 정말로 진행되고있는 것을 알아 냈습니다.

    매퍼의 출력은 크기의 약 80 %가 될 때까지 버퍼링되고, 그 시점에서 결과는 로컬 디스크로 덤프되기 시작하고 버퍼에 항목을 계속해서 허용합니다.

    매퍼의 중간 출력을 가져 와서 매퍼가 계속 실행되는 동안 다른 작업의 입력으로 사용하고 싶었습니다. hadoop 0.20.204 배포를 크게 수정하지 않으면 이것이 가능하지 않은 것으로 나타났습니다. 시스템이 작동하는 방식은 맵 컨텍스트에 지정된 모든 작업을 수행 한 후에도 가능합니다.

    map .... {
      setup(context)
      .
      .
      cleanup(context)
    }
    

    정리가 호출되면 임시 폴더에 덤프가 없습니다.

    그런 다음 Map 계산 전체가 결국 병합되어 디스크로 덤프되며 Reducer 앞에있는 Shuffling and Sorting 단계의 입력이됩니다.

    지금까지 내가 읽고 봤던 모든 것에서 출력이 결국 있어야하는 임시 폴더가 내가 미리 짐작하고 있던 것입니다.

    FileOutputFormat.getWorkOutputPath(context)
    

    나는 내가 다른 방식으로하고 싶은 것을 관리했다. 어쨌든 이 질문에 대한 질문이 있으면 알려주십시오.

  3. ==============================

    3.작업 추적기는 모든 맵 또는 축소 작업에 대해 별도의 JVM 프로세스를 시작합니다.

    작업 추적기는 모든 맵 또는 축소 작업에 대해 별도의 JVM 프로세스를 시작합니다.

    매퍼 출력 (중간 데이터)은 각 매퍼 슬레이브 노드의 로컬 파일 시스템 (HDFS 아님)에 기록됩니다. Reducer로 전송 된 데이터는이 임시 파일에 액세스 할 수 없습니다.

    Mapper 출력물을 볼 수 있다면 IdentityReducer를 사용하는 것이 좋습니다.

  4. from https://stackoverflow.com/questions/8603435/in-hadoop-where-does-the-framework-save-the-output-of-the-map-task-in-a-normal-m by cc-by-sa and MIT license