假设默认的hadoop设置,如果我将一个128mb大小的文件写入hdfs。客户端需要向hdfs写入2个块。所以我的问题是当第一个数据块被写入hdfs时,文件是否可以被人读取,或者它必须等待第二个数据块也被写入?第二种情况是64 mb的文件大小,2有人能读取当前写入hdfs的块吗?或者某人必须等待写入完成。
oaxa6hgo1#
通常,当您写入hdfs时,一旦写入的数据超过一个块的值,第一个块将对新的读卡器可见。对于后续的块也是如此。总是当前块被写入,而其他读卡器不可见。但是,可以使用fsdataoutputstream.sync()强制将所有缓冲区同步到数据节点。sync()返回成功后,写入该点的数据将保证对所有新读卡器可见。
ttisahbt2#
hdfs以块的形式思考。所以,如果你的文件是由两个块组成的,而你的一个块被写了,你就可以读这个块了。但是,因为它只是文件的一个块,而不是整个文件,所以您必须在 dfs.data.dir 使用 hadoop dfs -text 去读它。或者你可以去 namenode UI 去读它。对于第二个问题-不,您不能读取当前正在编写的块。读者看不见。
dfs.data.dir
hadoop dfs -text
namenode UI
2条答案
按热度按时间oaxa6hgo1#
通常,当您写入hdfs时,一旦写入的数据超过一个块的值,第一个块将对新的读卡器可见。对于后续的块也是如此。总是当前块被写入,而其他读卡器不可见。但是,可以使用fsdataoutputstream.sync()强制将所有缓冲区同步到数据节点。sync()返回成功后,写入该点的数据将保证对所有新读卡器可见。
ttisahbt2#
hdfs以块的形式思考。
所以,如果你的文件是由两个块组成的,而你的一个块被写了,你就可以读这个块了。但是,因为它只是文件的一个块,而不是整个文件,所以您必须在
dfs.data.dir
使用hadoop dfs -text
去读它。或者你可以去namenode UI
去读它。对于第二个问题-不,您不能读取当前正在编写的块。读者看不见。