我读到随机读写是不存在的 Hadoop HDFS
. 但是,写进去的理由 DFSOutputStream
是
void write(byte buf[], int off, int len)
void write(int b)
类似地,read-in的参数 DFSInputStream
是
int read(byte buf[], int off, int len)
int read()
在对的读/写调用中都可以看到offset参数 HDFS
. 为什么需要它,如果 MapReduce
只用于在最后一个位置添加数据的框架?“offset”参数是如何使用的 HDFS
? hdfs写入总是只附加吗?
2条答案
按热度按时间dohp0rv51#
参数int off并不表示输入文件中的随机点。它实际上是字节[]内的偏移量,从字节[]内写入数据的位置到长度字节数。例如,假设你已经写了
这将从输入文件的开头读取数据,而不是从文件的第5个字节读取数据。但是数组buf[]将从第5个字节填充到最后一个字节(5+10)。
要进行交叉检查,可以对参数off使用一些不同的值。无论您为off提供什么值,数据总是从文件的开头读取(如果您没有显式使用seek)。
这里需要注意的一点是数组的大小不能小于off+len。
运行此示例以清楚地了解:
hth公司
vd8tlhqk2#
“bytesread=in.read(b2,10,5);”只是fsdatainputstream的一个接口。read中的另一个接口(position、buffer、offset、len)支持随机读取。您还可以参考testdfsio random read案例。
hdfs不支持随机写入。