2014-11-18 2 views
0

아시다시피, hadoop의 셔플 단계에서 각 감속기는 모든 매퍼의 출력 (인터 미디어 데이터)에서 데이터를 읽습니다.Hadoop-2.4.1 감속기의 균형을 맞추는 커스텀 파티셔

이제는 기본적으로 해시 분할에 해시 - 파티셔닝이 사용된다는 것도 알고 있습니다.

내 질문은 : 알고리즘을 어떻게 구현합니까? Locality-aware?

답변

0

간단히 말해서는 안됩니다.

첫 번째로, 매퍼와 감속기가 클러스터에서 실행되는 위치를 제어 할 수 없으므로 단일 매퍼의 전체 출력이 단일 감속기로 이동하더라도 서로 다른 호스트에있을 가능성이 큽니다 데이터는 네트워크를 통해 전송됩니다.

둘째, 감속기가 매퍼의 전체 출력을 처리하도록하려면 먼저 매퍼가 정보의 올바른 부분을 처리해야합니다. 즉, 데이터를 사전 처리해야합니다. 파티션을 나누고 각 파티션에 대해 단일 매퍼와 단일 감속기를 실행하지만이 전처리 자체는 많은 리소스를 사용하므로 대부분 의미가 없습니다.

마지막으로, 왜 당신은 그것을 필요로합니까? map-reduce의 주요 개념은 키 - 값 쌍을 사용한 조작이며 일반적으로 감속기는 동일한 키의 맵퍼가 출력 한 값의 목록을 집계해야합니다. 다음은 왜 해시 분할이 사용되는 이유입니다. N 키를 사이에 배포하십시오. 다른 유형의 분할자를 사용하는 것은 드문 경우입니다. 데이터 지역성이 필요한 경우 예를 들어 Hadoop이 아닌 MPP 데이터베이스로 작업하는 것이 좋습니다.

사용자 정의 파티션 도구가 실제로 필요한 경우 구현 방법 예는 http://hadooptutorial.wikispaces.com/Custom+partitioner입니다. 특별한 것은 없으며 전달 된 키와 값 및 감속기의 수를 기반으로 감속기 번호를 반환하십시오. 감속기의 수로 나눠진 호스트 이름의 해시 코드를 사용하면 단일 매퍼의 전체 출력이 하나의 감속기로 이동합니다. 또한 공정 PID % 감속기를 사용할 수도 있습니다. 하지만이 작업을하기 전에 실제로이 동작이 필요한지 여부를 확인해야합니다.