MapReduce는 각 감속기의 입력이 키별로 정렬되도록 하며 시스템에서 수행되는 정렬 프로세스를 셔플이라고 합니다. 셔플 단계에는 주로 맵 단계의 결합, 그룹, 정렬, 분할, 리듀서 단계의 병합 정렬이 포함됩니다.
이 튜토리얼의 운영 환경: Windows 7 시스템, Dell G3 컴퓨터.
MapReduce는 각 리듀서의 입력이 키별로 정렬되도록 하며 시스템에서 수행되는 정렬 프로세스를 셔플이라고 합니다. 맵이 출력을 생성하고 입력을 소화하여 줄이는 전체 프로젝트로 이해할 수 있습니다.
맵 측면: 각 mapperTask에는 맵 작업의 출력을 저장하는 데 사용되는 링 메모리 버퍼가 있습니다. 임계값에 도달하면 백그라운드 스레드는 쓰기 전에 디스크의 지정된 디렉터리에 새로 생성된 오버플로 쓰기 파일에 콘텐츠를 씁니다. 디스크로 이동하려면 파티션, 정렬, 결합기를 거쳐야 합니다. 마지막 레코드가 기록된 후 오버플로 기록된 모든 파일을 하나의 분할되고 정렬된 파일로 병합합니다.
Reduce 측: 복사 단계, 정렬 단계, 축소 단계로 나눌 수 있습니다.
Copy 단계: 맵 출력 파일은 맵 작업을 실행하는 작업 추적기의 로컬 디스크에 위치합니다. Reduce는 http를 통해 출력 파일의 파티션을 얻습니다. , tasktracker는 파티션 파일입니다. 축소 작업을 실행하면 매핑 작업이 완료되자마자 출력 복사가 시작됩니다.
정렬 단계: 정렬이 지도 쪽에서 수행되기 때문에 병합 단계라는 용어가 더 적절합니다. 이 단계에서는 지도 출력을 병합하고 순서를 유지하며 반복합니다.
마지막 단계는 축소 단계입니다. 정렬된 출력의 각 키에 대해 축소 기능이 호출됩니다. 이 단계의 출력은 일반적으로 HDFS인 출력 파일 시스템에 직접 기록됩니다. ,
셔플 단계 설명
셔플 단계에는 주로 맵 단계의 결합, 그룹, 정렬, 분할이 포함되고 리듀서 단계의 병합 정렬이 포함됩니다. Map 단계에서 섞은 후 출력 데이터는 축소 파티션에 따라 파일에 저장되고 파일 내용은 정의된 정렬에 따라 정렬됩니다. Map 단계가 완료된 후 ApplicationMaster에 통지되고, AM은 Reduce에 데이터를 가져오라고 알리고, 가져오는 과정에서 감소 측에서 셔플 프로세스를 수행합니다.
참고: Map 단계의 출력 데이터는 Map 노드를 실행하는 디스크에 저장되며, Reduce가 데이터를 가져온 후에는 임시 파일이 삭제됩니다. HDFS를 사용하면 저장 공간이 손실됩니다(3개의 복사본이 생성됨).
사용자 정의 Combiner
Combiner는 Map 단계에서 중간 출력 결과 수를 줄이고 네트워크 오버헤드를 줄일 수 있습니다. 기본적으로 Combiner는 없습니다. 사용자 정의 Combiner는 Map의 출력
job.setCombinerClass를 통해 결합기 처리 클래스를 설정할 수 있습니다. MapReduce 프레임워크는 이 클래스의 메서드가 호출된다는 것을 보장하지 않습니다.
참고: 축소의 입력과 출력이 동일하면 축소 클래스를 결합기로 직접 사용할 수 있습니다.
사용자 정의 파티셔너
파티셔너는 축소의 <키, 값> 지도 출력에 해당하는 처리 감속기는 무엇입니까? 기본 MapReduce 작업 감소 수는 1입니다. 이때 Partitioner는 실제로 아무런 효과가 없습니다. 그러나 감소 수를 여러 개로 변경하면 파티셔너는 키에 해당하는 감소의 노드 수를 결정합니다(0부터 시작). ).
Job.setPartitionerClass 메서드를 통해 Partitioner 클래스를 지정할 수 있습니다. 기본적으로 HashPartitioner가 사용됩니다(기본적으로 key의 hashCode 메서드가 호출됩니다).
사용자 정의 그룹
GroupingComparator는 Map에서 출력한
자체 인터페이스 RawComparator를 구현하려면 사용자 정의 클래스가 필요하며, job.setGroupingComparatorClass 메소드를 통해 비교 클래스를 지정할 수 있습니다. 기본적으로 WritableComparator가 사용되지만 최종적으로 비교를 위해 키의 CompareTo 메서드가 호출됩니다.
사용자 정의 정렬
SortComparator는 Map에서 출력되는
자체 인터페이스 RawComparator를 구현하려면 사용자 정의 클래스가 필요하며, job.setSortComparatorClass 메소드를 통해 비교 클래스를 지정할 수 있습니다. 기본적으로 WritableComparator가 사용되지만 최종적으로 비교를 위해 키의 CompareTo 메서드가 호출됩니다.
사용자 정의 Reducer의 Shuffle
리듀스 측이 맵의 출력 데이터를 가져오면 셔플(병합 정렬)이 수행됩니다. MapReduce 프레임워크는 플러그인 모드에서 사용자 정의된 방식을 제공합니다. ShuffleConsumerPlugin을 사용하고 mapreduce.job.reduce.shuffle.consumer.plugin.class 매개변수를 지정하여 사용자 정의 셔플 규칙을 지정하지만 일반적으로 기본 클래스인 org.apache.hadoop.mapreduce.task.reduce.Shuffle이 직접 사용됩니다.
더 많은 프로그래밍 관련 지식을 보려면 프로그래밍 비디오를 방문하세요! !
위 내용은 시스템이 수행하는 정렬 프로세스를 무엇이라고 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!