HDFS 单写入器多个 reader 模型 - 读取不一致?
HDFS single writer multiple reader model - read inconsistency?
HDFS 允许单个写入器多个 reader 模型。在这个模型中——它是否会面临读取的数据与写入的数据不一致的情况?在执行显式 h-flush 操作之前,HDFS 不保证数据的可见性,但是如果 reader 读取的数据被 writer 更改了怎么办 - 这不会是数据不一致的问题吗?
reader读取的数据会被writer修改的场景,在HDFS中是完全不会发生的
正如您正确观察到的那样,HDFS 支持 write once
模型,它不允许对写入的数据进行任何修改。
所以一旦FSDataOutputStream.hsync()
被调用,数据就会被写入磁盘,客户端可以读取数据,写入者将无法修改刷新的数据。
修改内容的唯一方法是复制相同的数据并进行必要的更改。
编辑:-
HDFS 中的设计事实使我们能够读取正在复制的文件的最近写入的块,一旦块被刷新,主要是为了 跟踪完整的进度文件写操作,避免文件关闭失败,也支持hadoop fs -tail
命令。
请参考,
https://issues.apache.org/jira/browse/HADOOP-89
HDFS 仅保证 Eventual consistency
只有在客户端关闭文件写入操作后,文件的块才会在分布式系统中保持一致。
-- 礼貌@sunrise76
HDFS 允许单个写入器多个 reader 模型。在这个模型中——它是否会面临读取的数据与写入的数据不一致的情况?在执行显式 h-flush 操作之前,HDFS 不保证数据的可见性,但是如果 reader 读取的数据被 writer 更改了怎么办 - 这不会是数据不一致的问题吗?
reader读取的数据会被writer修改的场景,在HDFS中是完全不会发生的
正如您正确观察到的那样,HDFS 支持 write once
模型,它不允许对写入的数据进行任何修改。
所以一旦FSDataOutputStream.hsync()
被调用,数据就会被写入磁盘,客户端可以读取数据,写入者将无法修改刷新的数据。
修改内容的唯一方法是复制相同的数据并进行必要的更改。
编辑:-
HDFS 中的设计事实使我们能够读取正在复制的文件的最近写入的块,一旦块被刷新,主要是为了 跟踪完整的进度文件写操作,避免文件关闭失败,也支持hadoop fs -tail
命令。
请参考,
https://issues.apache.org/jira/browse/HADOOP-89
HDFS 仅保证 Eventual consistency
只有在客户端关闭文件写入操作后,文件的块才会在分布式系统中保持一致。
-- 礼貌@sunrise76