我有一个简单的java程序帽子连续写入hdfs。我的理解是,一旦特定的特定块用HDFS编写,它可以被其他客户端访问,但在我的情况下我无法这样做。我正在写一个大小为39 Kb的文件,每个写入在100 ms后开始。我用色调检查文件的状态,但它显示0字节,直到写入操作正在进行,写入完成后显示完整的文件。我希望能够读取文件中写入的数据,至少说4 Kb块。我正在使用默认配置。 我的假设是否正确?如果是这样,我做错了什么? 我使用带有CDH 4.4的VM。
答案 0 :(得分:2)
Hadoop Defhetive指南中的Coherency模型表示"创建文件后,它在文件系统命名空间中可见,如预期的那样:但是,即使流是,也不能保证写入文件的任何内容都可见。酡。因此该文件的长度为零:一旦写入了一个块的数据,第一个块将对新读者可见。"
hsync() or hflush() method of FSDataOutputStream should guarentee data is visible.
答案 1 :(得分:-1)
使用Hadoop文件系统,您可以读取已经用HDFS编写的文件。
以下是一些带有代码段的网址,可能对您有所帮助