Apache的文件说
Similar to posix fsync, flush out the data in client's user buffer
all the way to the disk device (but the disk may have it in its cache).
这很容易理解,但是当我在我的代码中使用它时,我不理解下面行为的原因。
每次写入()后我都调用hsync()。当我一个接一个地缓慢地泵送数据时,在写入第一个事件之后,当我执行 cat
或者 tail
在那个档案里,我看到了事件的档案。但是,在写了2到3个事件之后,我没有看到它们。我必须关闭流才能看到这些数据在文件中被刷新。
当我以一次10个事件或一次20个或更多事件的规模抽取数据时,我总是在不关闭流的情况下看到文件中的数据
与场景1类似,但这里不是在每次写入之后执行hsync(),而是将其安排为计时器任务。这里我也看到了文件中的数据而没有关闭流,但是这里hsycn()的调用数大于write()的调用数。例如,如果我已经编写了3个事件,那么在第4次或第5次调用hsync()之后,我会在文件中看到它们。
有人能给我解释一下这种行为的原因吗?希望我的描述清楚。
1条答案
按热度按时间oiopk7p51#
hsync操作是一种非常昂贵的操作,它将数据从操作系统缓冲区写入磁盘。每次写入之后,必须调用hflush而不是hsync。
更详细的解释请看我下面的帖子
https://medium.com/@kiran.palaka/how-hflush-works-in-hdfs-hadoop-52d782ed92d3