2014-10-31 2 views
0

mapreduce 작업이 디렉토리에서 사용할 수있는 1MB 크기의 파일 60 개를 읽으면 얼마나 많은 매퍼가 실행될 것입니까? 이/user/cloudera/inputs/디렉토리 아래에 60 개의 파일이 있고 각 파일의 크기는 1MB라고 가정합니다.Mapreduce 프로그램의 매퍼 수

mapreduce의 구성 클래스에서/user/cloudera/inputs/디렉토리를 지정했습니다.

누군가는 60 개 각 1메가바이트 크기의 파일과 얼마나 많은 맵퍼가 그렇다면 누군가가

방법을 설명해?

은 60 개 블록과 60 매퍼가 실행되는 것을 저장하는 데 얼마나 많은 블록 말해 줄 수

답변

0

맵 작업은 일반적으로 한 번에 입력 블록을 처리합니다 (기본 FileInputFormat 사용). 파일이 매우 작고 많은 파일이있는 경우 각 맵 작업은 입력을 거의 처리하지 않으며 많은지도 작업이 있으며 각 작업은 별도의 부기 오버 헤드를 부과합니다. 16GB 64MB 블록으로 나누어 진 1GB 파일과 10,000KB 정도의 100KB 파일을 비교하십시오. 10,000 개의 파일은 각각 하나의 맵을 사용하며 작업 시간은 단일 입력 파일을 사용하는 동일한 시간보다 수십 또는 수백 배 느려질 수 있습니다.

In your case 60 map are used in 60 files and used 60 blocks. 

당신이 TextInputFormat 같은 것을 사용하는 경우, 문제는 각 파일이 적어도 1 분할을 가지고, 그래서지도의 수의 상한은 경우에 당신이 가지고있는 파일의 수이며, 많은 아주 작은 파일 들로서 당신은 각각의 아주 작은 데이터를 처리하는 많은 매퍼로 끝날 것입니다.

, 즉 매퍼의 수는 파일의 수의 독립적 인 것 형식, 그래서 당신은 동일한 분할 (I 블록 크기 제한까지 생각)에 여러 개의 파일을 포장합니다 CombineFileInputFormat를 사용해야합니다, 그에게 해결하려면 단순히 데이터 양에 따라 달라집니다.

CombineFileInputFormt에서 확장하여 사용자 정의 입력 형식을 만들어야합니다. 구현은 here입니다. InputFormat을 정의한 후 CombinedInputFormat 링크처럼 호출하면 다음과 같이 작업하여 사용하도록 지시 할 수 있습니다.

job.setInputFormatClass(CombinedInputFormat.class); 
관련 문제