我正在使用Java API将一些自定义文件转换为hadoop序列文件。为什么Hadoop SequenceFile的写入比读取要慢得多?
我从本地文件读取的字节数组,并把它们添加到一个序列文件作为对指数(整数)的 - 数据(字节[]):
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)
我在伪分布式模式下测试。
时间单位什么是“数量级”? – 2012-03-04 16:19:30
“十倍以上” – fgrollio 2012-03-06 08:06:37