2016-09-17 65 views
0

大家好我想寫一個使用序列文件輸入和輸出文件的hadoop程序。我tryed建立job.setOutputFormatClass(SequenceFileOutputFormat.class)但它造成EOFException如何使用sequenceInput和輸出文件編寫hadoop程序?

我以前HVPIhttps://github.com/xmpy/hvpixuggler打破視頻爲幀。我希望將幀保存在序列文件中,並將其保存在HDFS中以用於其他地圖縮減任務。

另一種方法是編寫一個hadoop自定義輸出文件,但我不知道它是如何做到的。

我遵循這個教程http://hadooptutorial.info/hadoop-sequence-files-example/但我上

public void readFields(DataInput in) throws IOException { 
    int len = WritableUtils.readVInt(in); 
    byte[] temp = new byte[len]; 
    in.readFully(temp, 0, len);  
    ByteArrayInputStream byteStream = 
     new ByteArrayInputStream(temp); 
    bufferedImage = ImageIO.read(byteStream); 
} 


16/09/17 17:05:55 INFO mapred.LocalJobRunner: reduce task executor complete. 
16/09/17 17:05:55 WARN mapred.LocalJobRunner: job_local72686463_0001 
java.lang.Exception: java.io.EOFException 
    at org.apache.hadoop.mapred.LocalJobRunner$Job.runTasks(LocalJobRunner.java:462) 
    at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:529) 
Caused by: java.io.EOFException 

at java.io.DataInputStream.readFully(DataInputStream.java:197)  
at edu.bupt.videodatacenter.input.ImageWritable.readFields(ImageWritable.java:67) 
... 

更具體地在管線in.readFully(溫度,0,LEN)得到EOFException。這是來自ImageWritable類。它來自HVPI。我沒有做任何改變。我只是用這個。

+0

可能是readFields實現中的自定義可寫類型有問題。這只是當我使用SequenceFileInputFormat.addInputhPath(job,in)時發生的。 –

回答

0

錯誤是自定義類型實現。自定義類型的寫入方法錯誤。我只是添加out.write(byteOutputStream.toByteArray()),現在它工作正常。

相關問題