我使用的是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,有人能帮我吗。我不知道如何附加图像?
1条答案
按热度按时间3pmvbmvn1#
您的主要问题是以下几行:
就在里面
for
,创建新的writer
在每一关。它将替换路径中的上一个文件seq_path
. 因此,只有最后一个图像可用。把它从循环中拉出来,问题就会消失。