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).

这很容易理解,但是当我在代码中使用它时,我却不明白出现以下行为的原因。
  • 我在每个write()之后都调用hsync()。当我在另一个事件中缓慢地抽取数据时,在编写第一个事件之后,当我对该文件执行cattail时,我在文件中看到该事件。但是,在再编写2或3个事件之后,我看不到它们。我必须关闭流以查看那些数据被刷新到文件中。
  • 当我一次以10个事件或一次20个或更多事件的规模泵送数据时,我一直在查看文件中的数据,而不关闭流
  • 与方案1类似,但这里不是在每次写入后都执行hsync(),而是将其安排为计时器任务。在这里我也看到了文件中的数据而没有关闭流,但是在这里,hsycn()的调用数大于write()的调用数。例如,如果我编写了3个事件,则在hsync()的第4次或第5次调用之后,我在文件中看到了它们。

  • 谁能解释这个现象的原因?希望我的描述清楚。

    最佳答案

    Hsync操作是非常昂贵的IO操作,它将数据从os缓冲区写入磁盘。每次写入后,您必须调用hflush而不是hsync。

    有关更详细的解释,请在下面浏览我的帖子

    https://medium.com/@kiran.palaka/how-hflush-works-in-hdfs-hadoop-52d782ed92d3

    关于hadoop - hsync()如何在HDFS中工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33257397/

    10-11 07:21