【发布时间】:2012-03-02 09:50:39
【问题描述】:
我正在使用 Java API 将我拥有的一些自定义文件转换为 hadoop 序列文件。
我正在从本地文件中读取字节数组,并将它们作为索引(整数)-数据(字节[])对附加到序列文件中:
InputStream in = new BufferedInputStream(new FileInputStream(localSource));
FileSystem fs = FileSystem.get(URI.create(hDFSDestinationDirectory),conf);
Path sequenceFilePath = new Path(hDFSDestinationDirectory + "/"+ "data.seq");
IntWritable key = new IntWritable();
BytesWritable value = new BytesWritable();
SequenceFile.Writer writer = SequenceFile.createWriter(fs, conf,
sequenceFilePath, key.getClass(), value.getClass());
for (int i = 1; i <= nz; i++) {
byte[] imageData = new byte[nx * ny * 2];
in.read(imageData);
key.set(i);
value.set(imageData, 0, imageData.length);
writer.append(key, value);
}
IOUtils.closeStream(writer);
in.close();
当我想将文件恢复到初始格式时,我会做完全相反的事情:
for (int i = 1; i <= nz; i++) {
reader.next(key, value);
int byteLength = value.getLength();
byte[] tempValue = value.getBytes();
out.write(tempValue, 0, byteLength);
out.flush();
}
我注意到写入 SequenceFile 几乎比读取要多一个数量级。 我预计写入比读取要慢,但这种差异正常吗?为什么?
更多信息:
我读取的字节数组大小为 2MB(nx=ny=1024 和 nz=128)
我正在伪分布式模式下进行测试。
【问题讨论】:
-
什么是时间单位的“数量级”?