用于处理PDF文件的Java MapReduce程序

用于处理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答案中扩展到自

我需要用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

我的自定义输入格式类:

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
is
class
not
interface

更新


感谢您的回答,但如果我使用建议的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;