Hadoop Partitioner: 소개, 구문, 구현에 대해 알아보기
게시 됨: 2020-05-14이 Hadoop Partitioner 자습서의 기본 목적은 Hadoop에서 활용되는 모든 부분에 대한 정의를 포인트별로 제공하는 것입니다. 이 포스트에서는 Hadoop Partitioner의 의미, Hadoop에서 Partitioner의 필요성, Hadoop 파티셔닝의 좋지 않은 경우에 대해 다룰 것입니다.
Hadoop Partitioner가 무엇인지 이해합시다.
목차
Hadoop의 파티셔너란 무엇입니까?
파티셔너는 출력이 맵 단계에서 리듀서로 이동하는 방법을 배포하는 것을 허용합니다.
Partitioner는 중간 맵 출력의 키 세그먼트를 제어합니다. 키 또는 키의 하위 집합을 사용하여 해시 함수로 파티션을 추론합니다.
사실 Hadoop 구조는 해시 기반 파티셔너입니다. Hadoop의 이 해시 함수는 파티션을 파생하는 데 도움이 됩니다.
파티션은 키 값에 따라 매퍼 출력에서 작동합니다. 동일한 키 값이 각 매퍼 내의 동일한 파티션으로 이동합니다. 이 프로세스가 끝나면 최종 파티션이 리듀서로 전송됩니다.

파티션의 클래스는 키와 값의 쌍이 어디로 갈 것인지를 결정합니다. 파티셔닝 단계는 맵의 중간에 있으며 단계를 축소합니다.
Hadoop Partitioner가 필요한 이유를 살펴보겠습니다.
Hadoop 파티셔너가 필요한 이유는 무엇입니까?
입력 데이터 세트가 사용되며 MapReduce 아키텍처 작업 단계에서 키 및 값 쌍 목록이 생성됩니다. 이러한 키 및 값 쌍은 맵 단계에서 형성됩니다. 이는 입력 데이터가 분할될 때 발생하며 각 작업과 맵에서 처리되어 키 및 값 쌍 목록을 생성합니다.
그러나 map out 파티션은 키와 값을 기반으로 축소 단계 직전에 발생합니다. 이런 식으로 동일한 값의 모든 키는 함께 그룹화되고 동일한 리듀서로 이동합니다. 따라서 리듀서에서 맵의 출력 분포도 보장됩니다.
Hadoop MapReduce 파티셔닝을 사용하면 올바른 키가 올바른 리듀서로 전달되도록 하여 리듀서에 매퍼 출력을 고르게 배포할 수 있습니다.
읽기 : 인도의 Hadoop 개발자 급여
Hadoop의 해시 파티셔너 구문
다음은 Hadoop의 해시 파티셔너의 기본 구문입니다.
public int getPartition(K 키, V 값
int numReduceTasks)
{
return(key.hashCode() & Integer.MAX_VALUE) % numRedudeTasks;
}
하둡 파티셔너 구현
실제 응용 프로그램에서 Hadoop Partitioner를 사용하는 예를 보려면 건물의 한 블록에 있는 거주자에 대한 데이터가 포함된 아래 표를 살펴보겠습니다.
플랫 넘버 | 이름 | 성별 | 가족 구성원들 | 전기세 | |
1101 | 마니샤 | 여자 | 삼 | 1500 | |
1102 | 디팍 | 남성 | 4 | 2000년 | |
1103 | 산제이 | 남성 | 삼 | 1100 | |
1104 | 니디 | 여자 | 2 | 900 | |
1105 | 프라텍 | 남성 | 1 | 650 | |
1106 | 고팔 | 남성 | 4 | 1800년 | |
1107 | 삼익샤 | 여자 | 2 | 1300 |
이제 다른 가족 구성원 그룹(2~3명 및 4명 미만)에서 성별로 가장 높은 전기 요금을 찾는 프로그램을 작성해 보겠습니다.

주어진 데이터는 "/home/Hadoop/HadoopPartitioner" 디렉토리에 input.txt로 저장됩니다.
키는 특수 키 + 파일 이름 + 줄 번호의 패턴을 따릅니다. 예를 들어,
키 = 입력@1
이를 위해 값은
값 = 1101 \t 마니샤 \t 여성 \t 3 \t 1500
작업 방법은 다음과 같습니다.
- 값 읽기
- split 함수를 사용하여 성별을 구분하고 문자열 변수에 저장
String[] str = value.toString().split("\t", -2);
문자열 성별 = str[2];
- 이제 성별 정보를 보내고 파티션 작업에 ley 및 값 쌍으로 데이터 값을 기록하십시오.
context.write(새로운 텍스트(성별), 새로운 텍스트(값));
- 모든 레코드에 대해 반복
출력으로 정렬된 성별 데이터와 데이터 값을 키 및 값 쌍으로 가져옵니다.
다음은 파티셔너 작업이 진행되는 방식입니다.
먼저 파티셔너는 입력으로 전송된 키 및 값 쌍을 사용합니다. 이제 데이터를 다른 세그먼트로 나눕니다.
입력
키 = 성별 필드 값
값 = 해당 성별의 레코드 값
절차는 다음과 같습니다.
- 키 값 쌍에서 가족 구성원 값 읽기
String[] str = value.toString().split("\t");
정수 나이 = 정수.parseInt(str[3]);
- 다음 조건으로 가족 구성원 가치를 확인하십시오
- 2~3인 가족
- 4세 미만의 가족구성원
if(가족구성원<4)
{
반환 0;
}
else if(가족구성원>=2 && 가족구성원<=3)
{
1% numReduceTasks를 반환합니다.
}
또 다른
{
2% numReduceTasks 반환;
}
산출
키 및 값 쌍의 데이터는 주어진 세 가지 컬렉션으로 분할됩니다.
또한 배우십시오: 알아야 할 최고의 Hadoop 도구
빈약한 파티셔닝 및 극복
입력 데이터의 키 중 하나가 다른 키보다 더 많이 표시될 것이라고 예측할 수 있다고 가정해 보겠습니다. 따라서 모든 키(많은 수)를 하나의 파티션으로 보내고 나중에 나머지 키를 hashCode()를 사용하여 다른 모든 파티션에 배포해야 할 수도 있습니다.
이제 파티션에 정보를 보내는 두 가지 메커니즘이 있습니다.
- 먼저, 더 많이 표시되는 키가 하나의 파티션으로 전송됩니다.
- 둘째, 나머지 모든 키는 hashCode()에 따라 파티션으로 전송됩니다.
이제 hashCode() 기술이 파티션에 다른 키를 적절하게 배포하지 않는 것으로 판명되었다고 가정해 보겠습니다. 따라서 정보는 파티션과 리듀서에서 동일하게 순환되지 않습니다. 이는 각 파티션이 리듀서에 비례하기 때문입니다.

따라서 특정 리듀서는 다른 리듀서보다 더 많은 양의 데이터를 갖게 됩니다. 따라서 나머지 감속기는 당면한 부하로 인해 하나의 감속기(사용자 정의 키가 있는 감속기)를 기다려야 합니다.
이 경우 다른 리듀서 간에 데이터를 공유하는 방법론을 따라야 합니다. Hadoop 궁극의 튜토리얼을 통해 Hadoop에 대해 자세히 알아보십시오.
결론
Hadoop Partitioners에 대한 이 가이드가 도움이 되었기를 바랍니다. 이 주제에 대한 자세한 내용은 upGrad의 전문가에게 문의하십시오.
빅 데이터에 대해 더 알고 싶다면 PG 디플로마 빅 데이터 소프트웨어 개발 전문화 프로그램을 확인하십시오. 이 프로그램은 실무 전문가를 위해 설계되었으며 7개 이상의 사례 연구 및 프로젝트를 제공하고 14개 프로그래밍 언어 및 도구, 실용적인 실습을 다룹니다. 워크샵, 400시간 이상의 엄격한 학습 및 최고의 기업과의 취업 지원.
세계 최고의 대학에서 온라인으로 소프트웨어 개발 과정 을 배우십시오 . 이그 제 큐 티브 PG 프로그램, 고급 인증 프로그램 또는 석사 프로그램을 획득하여 경력을 빠르게 추적하십시오.
