2011-12-28 4 views
3

하둡 작업에 입력을 제공하기 위해 CompositeInputFormat을 사용하고 있습니다.하둡 파일 분할 : CompositeInputFormat : 내부 조인

생성 된 분할 수는 CompositeInputFormat (결합 용)에 대한 입력으로 제공된 파일의 총 개수입니다.

작업은 블록 크기와 최대 분할 크기를 완전히 무시합니다 (CompositeInputFormat에서 입력을 가져 오는 동안). 이는 길게 실행되는지도 작업으로 이어지고 입력 파일이 블록 크기보다 커서 시스템 속도가 느려집니다.

누구나 CompositeInputFormat에 대해 분할 수를 관리 할 수있는 방법을 알고 있습니까?

답변

6

아쉽게도 CompositeInputFormat은 블록/분할 크기를 무시해야합니다. CompositeInputFormat에서 입력 파일을 정렬하고 동일하게 분할해야하므로 Hadoop에서는이 속성을 유지하기 위해 파일을 분할 할 위치를 결정할 방법이 없습니다. 파일을 정리하기 위해 파일을 분할 할 위치를 결정할 방법이 없습니다.

이 문제를 해결할 수있는 유일한 방법은 수동으로 파일을 분할하여 작은 분할로 나누는 것입니다. 맵 축소 작업 (아이덴티티 맵퍼와 ID 감속기)을 통해 더 많은 양의 감속기로 데이터를 전달하여이 작업을 수행 할 수 있습니다. 동일한 수의 감속기를 사용하여 두 데이터 세트를 모두 전달해야합니다.

+0

이미 최대 개수의 리듀서를 사용하고 있습니다. 여러 개의지도 파도에 대해 더 작은 블록 크기가 필요합니다. 현재 맵 작업이 너무 커서 성능상의 문제는 물론 작업 실패가 발생합니다. – TheHat

+1

나는 당신이 내가 말하는 것을 이해하고 있다고 생각하지 않는다. 문제는 CompositeInputFormat을 사용할 때 입력 분할로지도 작업을 분할 할 수 없다는 것입니다. 이 문제를 해결하는 방법은 수동으로 파일을 분리하는 것입니다. 따라서 큰 파일을 가지고 작은 파일로 분할하십시오. 이것을하기위한 한 가지 방법은 제 2 단락에서 제안하는 것입니다. 그런데 최대 감속기 수와 같은 것은 없습니다. –

+0

내 입력이 다른 mapreduce 작업의 출력입니다. mapreduce 작업에 의한 출력 파일의 수는 사용 된 감속기 타스크의 수와 같습니다. redcuer 작업의 최대 수는 클러스터의 감속기 작업 용량과 같습니다. 이 시나리오에서는 하나의 mapreduce 작업을 실행 한 다음 파일을 분할 한 다음 다른 mapreduce 작업을 실행하는 것이 솔루션으로 적합하지 않습니다. – TheHat