2016-06-29 4 views
1

소량의 데이터 (200MB)로 작업하는 Mapreduce 작업이 있습니다. 맵 단계는 계산 상 간단하지만 감축 단계는 계산적으로 비용이 많이들 수 있으므로 한 입력을 분석하는 데 더 많은 시간이 필요합니다. 32MB의 분할 크기가 주어지면 맵 단계에서 모든 기계가 계산 중이지만 축소 단계에서는 하나만 나타나고 축소 단계는 훨씬 느리게 진행됩니다. 축소 단계에 모든 기계를 사용할 수 있도록 작업의 축소 단계에서만 분할을 작게 만드는 방법이 있습니까?hadoop split split size

+0

매퍼가 몇 개의 키 그룹을 생성합니까? –

+0

@BinaryNerd 어떻게 알 수 있습니까? – user4052054

+0

직업 카운터, 표준 카운터를보십시오. 당신은 또한 당신의 열쇠가 무엇인지, 얼마나 세분화되어 있는지를 알아야합니다. 예를 들어 하나의 키가있는 경우 하나의 감속기 만 실행됩니다. –

답변

1

분할 크기는 축소 병렬 처리에 영향을주지 않습니다. 매퍼의 수를 늘립니다.

MapReduce에는 사용할 감속기의 수를 지정해야합니다. mapreduce.job.reduces 속성을 기본값 1로 설정하거나 Job.setNumReduceTasks(int tasks) (see javadoc)을 사용할 수 있습니다. 여기에서이 숫자를 늘리고 싶습니다.

Apache Crunch와 같은 상위 수준 도구는 입력 크기, 제공된 축소 배율 및 각 축소 기의 대상 입력 크기에서 사용하는 축소 기 수를 자동으로 설정합니다. 많은 작업이 필요에 맞지 않으면 하드 코딩을 쉽게 구현할 수 있습니다.