2013-05-21 3 views
0

hadoop 0.20.2에 대한 간단한 맵 작업을 작성했으며 입력 데이터 세트는 44 개의 파일로 구성되어 있으며 각각은 약 3-5MB입니다. 모든 파일의 각 행은 int,int 형식입니다. 입력 형식은 기본값 인 TextInputFormat이고 매퍼의 작업은 입력으로 Text을 구문 분석하여 정수로 변환하는 것입니다.hadoop textinputformat 파일 당 하나의 행만 읽음

작업을 실행 한 후 hadoop 프레임 워크의 통계에 따르면 맵 작업의 입력 레코드 수가 44 개에 불과하다는 것을 알았습니다. 디버그를 시도한 결과 map의 입력 레코드가 각 파일의 첫 번째 줄에 불과하다는 것을 알았습니다.

누구에게 어떤 문제가 있는지, 어디에서 해결책을 찾을 수 있습니까?

고맙습니다.

편집 1

입력 데이터는 그 출력 형식을 TextOutputFormat<NullWritable, IntXInt>되는 다른 맵을 줄이고 작업에 의해 생성되었다. IntXInttoString() 방법은 int,int의 문자열을 제공해야합니다.

편집 2

내 매퍼 3

난 그냥 확인 한 다음

static class MyMapper extends MapReduceBas 
    implements Mapper<LongWritable, Text, IntWritable, IntWritable> { 

    public void map(LongWritable key, 
        Text value, 
        OutputCollector<IntWritable, IntWritable> output, 
        Reporter reporter) { 

    String[] s = value.toString().split(","); 
    IntXInt x = new IntXInt(s[0], s[1]); 
    output.collect(x.firstInt(), x.secondInt()); 
    } 
} 

편집과 같은, 매퍼 실제로, 각 파일의 단 1 라인을 읽어 NOT 전체 파일은 하나의 Text 값입니다.

+0

당신이 당신의 출력을 살펴 있었나요이 라인에 다른 무언가가 있는지 궁금

static class MyMapper extends Mapper <LongWritable,Text,Text,Text>{ public void map (LongWritable key, Text value, Context context) throws IOException, InterruptedException { //do your mapping here } } 

즉? – smttsp

+0

@greedybuddha : 예. – user1906342

+0

@smttsp : 출력은 44 레코드입니다. – user1906342

답변

0

InputFormat은 파일에서 Mapper 인스턴스로 데이터를 읽는 방법을 정의합니다. 기본 TextInputFormat은 텍스트 파일의 행을 읽습니다. 각 레코드에 대해 방출하는 키는 읽은 행의 바이트 오프셋 (LongWritable)이며, 값은 종결 '\ n'문자까지의 행 내용입니다 (Text 객체로). 다중 각각 $ 문자로 분리 된 라인 레코드를 사용하는 경우 파일을이 문자로 분리 된 레코드로 파싱하는 자체 InputFormat을 작성해야합니다.

+0

좀 더 구체적으로 질문을 편집했습니다. – user1906342

0

매퍼가 모든 텍스트를 입력으로 가져 와서 출력물을 인쇄하는 것으로 의심됩니다. Mapper 클래스 해독 및 매퍼 함수 해독을 표시 할 수 있습니까? 내가

+0

내 질문을 편집했습니다. 이전 API를 사용하고 있습니다. – user1906342