Hadoop 映射器不发射任何东西

Hadoop 映射器不发射任何东西,hadoop,mapreduce,tesseract,hadoop2,Hadoop,Mapreduce,Tesseract,Hadoop2,我有一个mapreduce作业,它接受我以前构造的序列文件。序列文件的键为图像文件名,值为图像的字节表示。我的映射器应该获取每个图像,然后使用名为“基于”的图像到文本库对它们进行处理。映射程序运行时不会引发任何异常,但令人惊讶的是,输出文件夹为空且未生成任何文件。这是我的映射程序代码: import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.IOException; impo

我有一个mapreduce作业,它接受我以前构造的序列文件。序列文件的键为图像文件名,值为图像的字节表示。我的映射器应该获取每个图像,然后使用名为“基于”的图像到文本库对它们进行处理。映射程序运行时不会引发任何异常,但令人惊讶的是,输出文件夹为空且未生成任何文件。这是我的映射程序代码:

import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
import net.sourceforge.tess4j.*;
import org.apache.commons.io.output.ByteArrayOutputStream;
import org.apache.hadoop.io.ByteWritable;
import org.apache.hadoop.io.BytesWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

 public class testM extends Mapper<Text, BytesWritable, Text, Text> {

  public void map(Text ikey, BytesWritable ivalue, Context context) throws IOException, InterruptedException {

    //Read Current Image from File.
    BufferedImage img = ImageIO.read(new ByteArrayInputStream(ivalue.getBytes()));
    Tesseract instance = Tesseract.getInstance();           

    try {
        String text = instance.doOCR(img);          
        context.write(new Text("fff"), new Text("fff"));    

    } catch (TesseractException e) {

        context.write(new Text("fff"), new Text("fff"));            
        e.printStackTrace();
    }
    //String result = instance.doOCR(img);  

}
}

我尝试输出“fff”只是为了确保映射器工作,但正如我所说的,它不会输出任何东西。如果我删除line
String text=instance.doOCR(img)一切正常。我检查了序列文件的内容并查看了
img
的值,两者看起来都很好。有人知道问题是什么吗?

tesseract需要本机库,您的从属节点上是否安装了本机库?我不认为你把它作为工作资源的一部分发送出去。@ThomasJungblut我把它们添加到了我的项目中,这还不够吗?如何将它们作为我工作的一部分发送?如果它导致问题,我不应该收到错误消息吗?只是想让您知道,我的Hadoop群集是在我自己的计算机上运行的单个节点。您应该首先向map函数添加
@Override
注释,这通常是它不执行的原因。
 public static void main(String[] args) throws Exception {

    Configuration conf = new Configuration();
    Job job = Job.getInstance(conf, "Image2Text");
    job.setJarByClass(driver.class);
    job.setMapperClass(testM.class);

    // TODO: specify a reducer
    job.setReducerClass(Reducer.class);

    // TODO: specify output types
    //job.setOutputKeyClass(Text.class);
    //job.setOutputValueClass(Text.class);
    job.setMapOutputKeyClass(Text.class);
    job.setMapOutputValueClass(Text.class);

    //input format
    job.setInputFormatClass(SequenceFileInputFormat.class);

    // TODO: specify input and output DIRECTORIES (not files)
    FileInputFormat.setInputPaths(job, new Path("inSeq"));
    FileOutputFormat.setOutputPath(job, new Path("out"));

    if (!job.waitForCompletion(true))
        return;
}