假设默认Hadoop设置,如果我正在向HDFS写入128 MB大小的文件。客户端需要写入2个块才能写入HDFS。所以我的问题是
文件大小为64 MB的第二种情况,
2.有人可以读取当前写入HDFS的块吗?或者有人必须等待写完成。
答案 0 :(得分:1)
HDFS以块为单位进行思考。
因此,如果您的文件由2个块组成,并且您的一个块被写入,则可以读取该块。但是,由于它只是文件的一个块而不是整个文件,因此您必须在dfs.data.dir
中搜索它并使用hadoop dfs -text
来读取它。或者你可以去namenode UI
阅读它。
对于第二个问题 - 不,你不能阅读当前正在编写的块。它不会被读者看到。
答案 1 :(得分:0)
一般情况下,当你写入HDFS时,只要写了一个块值的数据,第一个块就会对新读者可见。对于后续块也是如此。它总是当前块写作,其他读者看不到。但是,您可以使用FSDataOutputStream.sync()强制所有缓冲区同步到数据节点。在sync()返回成功后,保证所有新读取器都可以看到写入该点的数据。