나는 한 번에 하나씩 큰 파일을 조작해야하는 Hadoop 0.20에서 일하고있다. (파일 기반 데이터를 MapReduce에 더 적합한 더 깨끗한 라인 기반 형식으로 가져 오는 전처리 단계입니다.)제로 기어를 사용할 때 Hadoop에서 무작위로 정렬 된 매퍼 출력을 얻을 수 있습니까?
내가 가진 출력 파일의 수는 무제하지만 각지도의 출력은 다음과 같을 수 있습니다. 최대 하나의 출력 파일 및 각 출력 파일을 정렬해야합니다.
-
numReducers = 0으로 실행하면 신속하게 실행되고 각 매퍼는 자체 출력 파일을 작성하지만 파일은 정렬되지 않습니다.
- 하나의 감속기 (일반 Reducer.class)를 추가하면 하나의 파일에 불필요한 전역 정렬 단계가 추가되어 많은 시간이 소요됩니다 (맵 작업보다 훨씬 오래 걸립니다).
- 여러 감속기를 추가하면 개별지도 작업의 결과가 함께 혼합되어지도의 출력이 여러 파일로 끝납니다.
Reducer를 사용하거나 느린 전역 병합을 건너 뛰는 다른 방법을 사용하지 않고도 각 작업의 출력에서 맵측 정렬을 수행하도록 Hadoop을 설득 할 수있는 방법이 있습니까?
"job.setCombinerClass (Reducer.class)"가 있습니다. 감속기가 0 일 때 적용되지 않는 것 같습니다. Mapper.java에서 :
작업이 0으로 감소하면
그래서 나는 이것을 회피하거나 다른 방법으로 같은 효과를 얻을 수있는 방법이 있는지 묻고 싶습니다. –Mapper
의 결과가 키 정렬없이 OutputFormat에 직접 기록됩니다.너무 나쁨. 그래서 맵퍼의'map' 콜백에서 아무 것도 출력 할 수 없지만 단순히 메모리에 수집 할 값을 숨기면됩니다. (너무 커지지 않도록 충분한 매퍼를 사용하십시오). 그런 다음'cleanup' 호출에서 값을 직접 정렬하고 출력하십시오. –
예 - 매퍼마다 메모리가 문제가 될 수 있지만 직접 분류해야한다고 생각합니다. 입력 해 주셔서 감사합니다. –