복붙노트

[HADOOP] MapReduce 작업 출력 정렬 순서

HADOOP

MapReduce 작업 출력 정렬 순서

내 mapreduce 작업에서 감속기 부분의 출력이 키에 의해 정렬된다는 것을 알 수 있습니다.

그래서 만약 내가 reducers의 번호를 10으로 설정하면, 출력 디렉토리는 10 개의 파일을 포함하고 각 출력 파일은 정렬 된 데이터를 가지게됩니다.

내가 여기에 올리는 이유는 모든 파일이 데이터를 정렬했지만 이러한 파일 자체는 정렬되지 않는다는 것입니다. 예 : part-000 * 파일이 0부터 시작하여 zzzz에서 끝나는 시나리오가 있습니다. 텍스트를 키로 사용한다고 가정합니다.

나는 파일 내의 파일조차도 파일 1이 있어야하고 마지막 파일 부분 - 00009는 zzzz 또는 적어도> a를 가진 항목을 가져야한다고 가정하고있었습니다.

모든 영문자가 균일하게 분포 된 키를 가지고 있다고 가정합니다.

누군가가 왜 어떤 빛을 던져서 그런 행동을 할 수 있겠습니까?

해결법

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

    1.다음 방법을 사용하여 전역 정렬 파일 (기본적으로 원하는 파일)을 얻을 수 있습니다.

    다음 방법을 사용하여 전역 정렬 파일 (기본적으로 원하는 파일)을 얻을 수 있습니다.

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

    2.총 정렬

    총 정렬

    특정 키의 모든 키 값 쌍은 특정 감속기에 도달합니다. 이것은 Mapper 레벨의 Partitioners를 통해 발생합니다. 매퍼 수준의 Combiners는 Semi reducers로 작동하고 특정 키의 값을 Reducer로 보냅니다. HashPartitioner는 축소 기의 수를 결정하는 데 가장 적합한 분할 자입니다.

    감속기 출력은 키를 기반으로 정렬 된 모든 출력을 갖는 단일 파일입니다.

    보조 정렬

    지도 출력 키의 정렬 방법을 정의하는 데 사용됩니다. 매퍼 레벨에서 작동합니다. 이 경우 키와 함께 값의 순서를 제어 할 수 있습니다. 정렬은 둘 이상의 필드 값에서 수행 할 수 있습니다.

    총 주문 정렬 및 보조 정렬을 살펴보십시오.

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

    3.

    Q :all the files have sorted data but these files itself are not sorted..
    

    Ans : 사용자 지정 Hashpartitioner는 기본적으로 중간 출력 (매퍼에서)을 분할하는 데 사용됩니다.

    전의:

    If the intermediate values are 3,4,5,6,7,8,9,10,11
    Then the data will be partitioned into (lets say) Reducer: 
    R1{7,4,10}
    R2{5,11,8}
    R3{9,6,3}
    

    이제 플랫 파일은

    Part-00000 {4,,7,11}
    Part-00001 {5,8,11}
    Part-00002 {3,6,9}
    

    값순 정렬을 찾으려면 : 여기 ans가 있습니다.

  4. ==============================

    4.하이브 순서는 단일 감속기를 사용하므로 배분을 사용하여 정렬 할 수 있으며 정렬 된 테이블에서 다음을 수행 할 수 있습니다. 테이블의 로컬 덮어 쓰기 삽입 - 파일에 데이터 쓰기

    하이브 순서는 단일 감속기를 사용하므로 배분을 사용하여 정렬 할 수 있으며 정렬 된 테이블에서 다음을 수행 할 수 있습니다. 테이블의 로컬 덮어 쓰기 삽입 - 파일에 데이터 쓰기

  5. from https://stackoverflow.com/questions/14322381/mapreduce-job-output-sort-order by cc-by-sa and MIT license