用于处理PDF文件的Java MapReduce程序
我需要用Java解析mapreduce程序中的PDF文件。我正在使用CDH 5.0.1进行群集设置。我有一个由FileInputFormat扩展的自定义输入格式类,其中我重写了getRecordReader方法以返回自定义RecordReader的实例,以及isSplitable方法以防止文件不可拆分,如本文所建议的 现在的问题是,在当前的CDH API中,getRecordReader返回接口org.apache.hadoop.mapred.RecordReader,而在上述SO答案中扩展到自定义记录读取器的是一个抽象类org.apache.hadoop.mapreduce.RecordReader 我的自定义输入格式类:用于处理PDF文件的Java MapReduce程序,java,pdf,hadoop,mapreduce,yarn,Java,Pdf,Hadoop,Mapreduce,Yarn,我需要用Java解析mapreduce程序中的PDF文件。我正在使用CDH 5.0.1进行群集设置。我有一个由FileInputFormat扩展的自定义输入格式类,其中我重写了getRecordReader方法以返回自定义RecordReader的实例,以及isSplitable方法以防止文件不可拆分,如本文所建议的 现在的问题是,在当前的CDH API中,getRecordReader返回接口org.apache.hadoop.mapred.RecordReader,而在上述SO答案中扩展到自
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;
}
}
import org.apache.hadoop.mapred.FileInputFormat;
导入org.apache.hadoop.mapred.RecordReader;
公共类PDFInputFormat扩展了FileInputFormat{
@凌驾
公共RecordReader getRecordReader(InputSplit split、JobConf conf、Reporter Reporter)抛出IOException{
返回新的PDFRecordReader();
}
@凌驾
受保护的布尔isSplitable(文件系统fs,路径文件名){
返回false;
}
}
感谢您的帮助或指点,我在这里遗漏了什么。问题是您使用了错误的api(old
org.apache.hadoop.mapred.
api)
请使用新的API(org.apache.hadoop.mapreduce.*
)
使用这个新的API,您将得到下面的答案。在新的API中,RecordReader
isclass
notinterface
更新
感谢您的回答,但如果我使用建议的API,FileInputFormat没有getRecordReader方法,而是有createRecordReader。此外,我可以看到同一API中的两个类,即CDH 5.0.1-Hadoop 2.3.0,其中没有任何一个列为已弃用的类。这里,我给出了同一API的两个类的链接。你是对的,旧的api还没有去润滑,以支持遗留代码。如果你正在做一个新的代码,我建议使用新的api实现。若要找到差异,请查看答案中的更新。非常感谢您的帮助,但在这种情况下,我如何支持重写新API中不存在的getRecordReader方法。您不需要该方法。createRecordReader是新API中的替代品。我曾经在我的案例中这样做过:
org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
org.apache.hadoop.mapreduce.RecordReader;