물론 여러 개의 감속기를 정의 할 수 있습니다. Job (Hadoop 0.20)의 경우 다음을 추가하십시오.
job.setNumReduceTasks(<number>);
그러나. 인프라는
- 에있는
- 그에 따라 mapred-site.xml의
에 mapred.tasktracker.reduce.tasks.maximum을 조정 가능한 두 개 이상의 CPU를 가지고 있음을 의미하는 여러 감속기를 지원해야
그리고 물론 당신의 직업은 일부 사양과 일치해야합니다. 당신이 정확하게 뭘 원하는지 모르고, 난 단지 다양한 팁 제공 할 수 있습니다 :
- 이 %의 numreducers에 의해 파티션으로 하나가 키 지도 출력을 또는 당신은 당신의 자신의 파티션 프로그램 정의 할 수 있습니다
job.setPartitionerClass(...)
를 들어 랜덤 파티션 프로그램으로 예 ...
- 데이터 감소-수 파티션 포맷 더 ...해야한다 (참조 필요?)
당신은 각 감속기 하나를 여러 개의 출력 파일을 얻을 수 있습니다. 정렬 된 출력을 원한다면 모든 파일 (이번에는 여러 개의 맵 작업 ...)을 읽는 다른 작업을 추가하고 하나의 감속기로 정렬하여 작성해야합니다 ...
Combiner- 클래스는 로컬 감속기입니다. 이는 맵에 의해 방출 된 부분 데이터보다 이미 메모리에 집계 (축소) 할 수 있음을 의미합니다. 아주 좋은 예는 WordCount-Example입니다. 지도는 각 단어를 키로 표시하고 개수는 1 : (단어, 1)로 표시합니다. Combiner는지도에서 부분 데이터를 가져 와서 (,)를 로컬에서 가져옵니다. Reducer는 똑같지 만, 이제 일부 (결합 된) 단어 수는 이미> 1입니다. 대역폭을 저장합니다.
하지만'context.write()'메쏘드로 새로운 키를 출력에 추가하면'Mapper' 객체로부터 전송되는 데이터가 여러 배가됩니다. 파일 읽기 문제 만 해결할 수 있습니까? –
그러면 매핑 된 데이터를 파일로 출력하고 다른 MR을 사용하여이 파일을 처리하도록 제안합니다. – Victor