1.0.3 sequencefile.writer将覆盖图像,而不是将图像附加到sequencefile中

1l5u6lss  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(271)

我使用的是hadoop1.0.3(我现在不能升级,那是以后的事了。)我的hdfs中有大约100个图像,我正在尝试将它们合并到一个sequencefile中(默认无压缩等…)
这是我的密码:

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();
                }}

这只需遍历input/中的所有文件,然后逐个添加它们。然而,这只是覆盖我的序列文件,而不是附加它,我只看到最后一个图像序列文件。
注意:我不会在for循环结束前关闭writer,有人能帮我吗。我不知道如何附加图像?

3pmvbmvn

3pmvbmvn1#

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

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

就在里面 for ,创建新的 writer 在每一关。它将替换路径中的上一个文件 seq_path . 因此,只有最后一个图像可用。
把它从循环中拉出来,问题就会消失。

相关问题