[HADOOP] MapReduce의 파티셔닝은 정확히 어떻게 작동합니까?
HADOOPMapReduce의 파티셔닝은 정확히 어떻게 작동합니까?
필자는 MapReduce 프로그래밍 모델을 일반적으로 잘 이해하고 있다고 생각하지만 원래의 종이 및 기타 소스를 읽은 후에도 특히 중간 결과를 분할하는 것과 관련하여 많은 세부 사항이 명확하지 않습니다.
지금까지 MapReduce에 대한 나의 이해를 요약하여 요약 해 보겠다. 우리는 잠재적으로 매우 큰 입력 데이터 세트를 가지며, 이는 MR- 프레임 워크에 의해 M 개의 다른 부분으로 자동 분할된다. 각 구성 요소에 대해 프레임 워크는 클러스터에서 사용 가능한 프로세서 / 머신 중 하나에 의해 실행되는 하나의 맵 작업을 예약합니다. M 맵 작업 각각은이 맵 작업을 실행 한 동일한 컴퓨터에 로컬로 저장되는 키 - 값 - 쌍 집합을 출력합니다. 각 기계는 디스크를 R 파티션으로 분할하고 중간 키를 기반으로 계산 된 중간 키 값 쌍을 파티션간에 분배합니다. 그런 다음 프레임 워크는 사용 가능한 모든 기계에서 다시 실행되는 각각의 중간 키 하나 축소 작업마다 시작됩니다.
이제 내 질문은 :
개념적으로지도의 입력과 출력 및 기능 / 작업 감소가 무엇인지 분명합니다. 그러나 아직 기술 수준에서 MapReduce를 이해하지 못했다고 생각합니다. 이해 좀 도와 주실 래요?
해결법
-
==============================
1.또한 중간 키의 해시 및 변형을 이해하고 (기본 HashPartitioner를 사용하는 경우) 해당 키를 처리 할 축소 파티션을 결정하는 것이 중요합니다. 감속기 작업 (10)을 짝수로하고 출력 키를 항상 짝수로 해시하면 -이 경우 해시 수와 10의 모듈로는 항상 짝수가됩니다. 즉, 홀수 번호의 감속기는 어떤 데이터도 결코 처리하지 말라.
또한 중간 키의 해시 및 변형을 이해하고 (기본 HashPartitioner를 사용하는 경우) 해당 키를 처리 할 축소 파티션을 결정하는 것이 중요합니다. 감속기 작업 (10)을 짝수로하고 출력 키를 항상 짝수로 해시하면 -이 경우 해시 수와 10의 모듈로는 항상 짝수가됩니다. 즉, 홀수 번호의 감속기는 어떤 데이터도 결코 처리하지 말라.
-
==============================
2.크리스가 말한 것에 대한 부록,
크리스가 말한 것에 대한 부록,
기본적으로 Hadoop의 파티션 클래스 (예 : Default HashPartitioner)
이 기능을 구현해야합니다.
int getPartition(K key, V value, int numReduceTasks)
이 함수는 파티션 번호를 반환하고 HashPartitioner 에서처럼 numReduceTasks 변수에서 작업을 시작할 때 수정 한 리듀서 수를 가져옵니다.
위의 함수가 반환하는 정수를 기반으로 Hadoop은 특정 키에 대한 reduce 작업이 실행되어야하는 노드를 선택합니다.
희망이 도움이됩니다.
from https://stackoverflow.com/questions/17734468/how-does-partitioning-in-mapreduce-exactly-work by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 현재 실행중인 hadoop 작업의 이름을 얻는 방법? (0) | 2019.07.06 |
---|---|
[HADOOP] 하이브 쿼리 내에서 입력 파일 이름을 열로 가져 오는 방법 (0) | 2019.07.06 |
[HADOOP] HDFS 디렉토리의 파일 수 (0) | 2019.07.06 |
[HADOOP] hadoop에서 어떤 데이터 블록이 어떤 데이터 노드에 있는지 추적하는 방법은 무엇입니까? (0) | 2019.07.06 |
[HADOOP] Hadoop : java.lang.ClassCastException : org.apache.hadoop.io.LongWritable을 org.apache.hadoop.io.Text로 형변환 할 수 없습니다. (0) | 2019.07.06 |