2014-11-24 4 views
1

Java를 사용하여 mapreduce 프로그램에서 PDF 파일을 구문 분석해야합니다. CDH 5.0.1을 사용하는 클러스터 설치입니다. 사용자 정의 RecordReader의 인스턴스를 반환하는 getRecordReader 메서드를 재정의 한 FileInputFormat과이 SO answer에 제안 된대로 파일을 분할 할 수 없도록하는 isSplitable 메서드로 확장 한 사용자 지정 입력 형식 클래스가 있습니다.Java MapReduce 프로그램이 PDF 파일에서 작동합니다.

현재의 CDH API에서 getRecordReader가 Interface org.apache.hadoop.mapred.RecordReader를 리턴하는 반면, 위의 SO 응답에서 사용자 정의 레코드 판독기로 확장 된 것은 추상 클래스 org.apache.hadoop입니다. mapreduce.RecordReader.

내 사용자 정의 입력 형식 클래스 :

import org.apache.hadoop.mapred.FileInputFormat; 
import org.apache.hadoop.mapred.RecordReader; 

public class PDFInputFormat extends FileInputFormat<Text, Text> { 

@Override 
public RecordReader<Text, Text> getRecordReader(InputSplit split, JobConf conf, Reporter reporter) throws IOException { 
    return new PDFRecordReader(); 
    } 

@Override 
protected boolean isSplitable(FileSystem fs, Path filename) { 
    return false; 
    } 

} 

내가 여기 실종 무엇인지에 어떤 도움이나 포인터를 주셔서 감사합니다.

답변

1

문제는 당신이 SO이 새로운 API를 사용하여 다음을 답변 새로운 API (org.apache.hadoop.mapreduce.*)

org.apache.hadoop.mapreduce.lib.input.FileInputFormat; 
org.apache.hadoop.mapreduce.RecordReader; 

을 사용하십시오 잘못된 API (구 org.apache.hadoop.mapred.* API)를 사용하는 것입니다. 새로운 API에 RecordReader는 UPDATE class하지 interface

응답에 대한

mapred vs mapreduce API

+0

감사합니다,하지만 내가 제안 된 API를 사용하는 경우 FileInputFormat 그것이 createRecordReader을 가지고 오히려 getRecordReader 방법이 없습니다. – Harman

+0

또한 같은 API (예 : CDH 5.0.1 - Hadoop 2.3.0)에서 두 가지 클래스를 사용할 수 있지만 deprecated로 나열되지 않습니다. 여기에서는 동일한 API에 대한 두 클래스에 대한 링크를 제공했습니다. [org.apache.hadoop.mapred.FileInputFormat] (http://archive-primary.cloudera.com/cdh5/cdh/5/hadoop-2.3.0-cdh5.0.1/api/index.html?org/apache /hadoop/mapred/FileInputFormat.html) [org.apache.hadoop.mapreduce.lib.input.FileInputFormat] (http://archive-primary.cloudera.com/cdh5/cdh/5/hadoop-2.3.0- cdh5.0.1/api/index.html? org/apache/hadoop/mapred/FileInputFormat.html) – Harman

+0

기존 API를 지원하기 위해 이전 api가 아직 손상되지 않았 음을 확인했습니다. 새 코드를 작성하면 새로운 API 구현. 차이점을 찾으려면 답변의 업데이트를 참조하십시오. –

관련 문제