hadoop-1.0.3 sequenceFile.Writer会覆盖而不是将图像附加到序列文件中

时间:2014-11-05 04:18:01

标签: hadoop image-processing filesystems hdfs sequence

我正在使用hadoop 1.0.3(我现在无法真正升级,稍后会这样做。) 我的HDFS中有大约100张图像,我正在尝试将它们组合成一个序列文件(默认没有压缩等)。

这是我的代码:

            FSDataInputStream  in = null;
                BytesWritable value = new BytesWritable();
                Text key = new Text();
                Path inpath = new Path(fs.getHomeDirectory(),"/user/hduser/input");
                Path seq_path = new Path(fs.getHomeDirectory(),"/user/hduser/output/file.seq");
                FileStatus[] files = fs.listStatus(inpath);
                SequenceFile.Writer writer = null;
                for( FileStatus fileStatus : files){
                          inpath = fileStatus.getPath();
                try {

                            in =  fs.open(inpath);
                            byte bufffer[] = new  byte[in.available()];
                            in.read(bufffer);
                            writer = SequenceFile.createWriter(fs,conf,seq_path,key.getClass(),value.getClass());
                            writer.append(new Text(inpath.getName()), new BytesWritable(bufffer));



                }catch (Exception e) {
                    System.out.println("Exception MESSAGES = "+e.getMessage());
                    e.printStackTrace();
                }}

这只是遍历输入中的所有文件/并逐个追加它们。 HOWEVER 这只是覆盖我的序列文件而不是附加它,我只看到sequencefile中的最后一个图像。

注意我没有在for循环结束前关闭作者,有人可以帮我解决这个问题。 我不确定如何附加图像?

1 个答案:

答案 0 :(得分:0)

您的主要问题是以下一行:

 writer = SequenceFile.createWriter(fs, conf, seq_path, key.getClass(), value.getClass());

位于for内,每次传递都会创建一个新的writer。它替换路径seq_path上的先前文件。因此,只有最后一张图像可用。

将其拉出循环,问题应该消失。