복붙노트

[HADOOP] 레코드 리더 및 레코드 경계

HADOOP

레코드 리더 및 레코드 경계

하나의 입력 파일이 있고이 파일에 대해 HDFS에서 3 개의 블록이 생성되었다고 가정합니다. 세 개의 데이터 노드가 있고 각 데이터 노드가 하나의 블록을 저장한다고 가정합니다. 3 개의 입력 분할이있는 경우 3 개의 매퍼가 병렬로 실행되어 각 데이터 노드에 로컬로 데이터를 처리합니다. 각 매퍼는 입력 형식 및 레코드 판독기를 사용하여 키 값 쌍으로 입력을받습니다. 레코드가 파일의 완전한 텍스트 행인 TextInputFormat의이 시나리오. 여기서 첫 번째 블록의 끝에 레코드 구분이 있으면 어떻게됩니까? 1)이 시나리오에서 하둡은 어떻게 완전한 기록을 읽습니까? 2) 데이터 노드 1이 데이터 노드 2에 접속하여 완전한 레코드를 얻습니까? 3) 데이터 노드 2가 데이터 처리를 시작하고 첫 번째 행에서 불완전한 레코드를 식별하면 어떻게됩니까?

해결법

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

    1.희망은 도움이 Logged

    희망은 도움이 Logged

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

    2."Hadoop : The Definitive Guide"가있는 경우이 문제를 정확하게 설명하는 246 페이지 (최신 버전)를 살펴보십시오 (아쉽지만 불행히도).

    "Hadoop : The Definitive Guide"가있는 경우이 문제를 정확하게 설명하는 246 페이지 (최신 버전)를 살펴보십시오 (아쉽지만 불행히도).

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

    3.LineRecordReader.java의 hadoop 소스 코드에서 생성자 : 나는 몇 가지 의견을 찾습니다 :

    LineRecordReader.java의 hadoop 소스 코드에서 생성자 : 나는 몇 가지 의견을 찾습니다 :

    // If this is not the first split, we always throw away first record
    // because we always (except the last split) read one extra line in
    // next() method.
    if (start != 0) {
      start += in.readLine(new Text(), 0, maxBytesToConsume(start));
    }
    this.pos = start;
    

    이것으로부터 나는 (확정되지 않은) hadoop이 각 분할에 대해 하나의 추가 행을 읽습니다 (현재 분할의 끝에서 다음 분할에서 다음 행을 읽음). 첫 번째 분할이 아닌 경우 첫 번째 행이 버려집니다. 라인 레코드가 손실되거나 불완전하지 않도록

  4. from https://stackoverflow.com/questions/13562146/record-reader-and-record-boundaries by cc-by-sa and MIT license