gpt4 book ai didi

hadoop - 为什么 Hadoop SequenceFile 写比读慢很多?

转载 作者:可可西里 更新时间:2023-11-01 16:34:37 35 4
gpt4 key购买 nike

我正在使用 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)
我正在以伪分布式模式进行测试。

最佳答案

您正在从本地磁盘读取并写入 HDFS。当您写入 HDFS 时,您的数据可能正在被复制,因此根据您为复制因子设置的内容,它实际上被写入了两次或三次。

因此,您不仅在写入,而且写入的数据量是您正在读取的数据量的两到三倍。您的写入正在通过网络进行。你的阅读不是。

关于hadoop - 为什么 Hadoop SequenceFile 写比读慢很多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9531125/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com