我正在使用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循环结束前关闭作者,有人可以帮我解决这个问题。 我不确定如何附加图像?
答案 0 :(得分:0)
您的主要问题是以下一行:
writer = SequenceFile.createWriter(fs, conf, seq_path, key.getClass(), value.getClass());
位于for
内,每次传递都会创建一个新的writer
。它替换路径seq_path
上的先前文件。因此,只有最后一张图像可用。
将其拉出循环,问题应该消失。