hsync()如何在HDFS中工作?

时间:2015-10-21 10:51:39

标签: hadoop synchronization hdfs

Apache的文档说

//html whose image will be created.
<div id="mydiv">
     <p>text!</p>
     <h1>This is a test!!</h1>
</div>

//div where image will be rendered.
<div id="image">
        <p>Image:</p>
</div>

//script to create image of html

<script type="text/javascript" src="/js/html2canvas.js"></script>
    <script type="text/javascript">
        html2canvas([document.getElementById('mydiv')], {
            onrendered: function (canvas) {

                var data = canvas.toDataURL('image/gif');
                var image = new Image();
                image.src = data;
                document.getElementById('image').appendChild(image);

            }
        });
    </script>

这很容易理解但是当我在我的代码中使用它时,我不理解跟随行为的原因。

  1. 我在每次write()后调用hsync()。当我在另一个事件之后缓慢地抽取数据时,在写完第一个事件之后,当我对该文件执行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). cat时,我在文件中看到了该事件。但是,在写了2到3个事件后,我没有看到它们。我要关闭流以查看在文件中刷新的数据。
  2. 当我一次以10个事件或每次20个或更多事件的规模抽取数据时,我会一直看到文件中的数据而不关闭流
  3. 与方案1类似,但是在每次写入后,不是在执行hsync(),而是将其安排为计时器任务。在这里我也看到文件中的数据没有关闭流,但是这里hsycn()的调用次数大于write()的调用次数。例如,如果我写了3个事件,我会在hsync()的第4或第5次调用之后在文件中看到它们。
  4. 有人能解释一下这种行为的原因吗?希望我的描述清楚。

1 个答案:

答案 0 :(得分:0)

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

有关详细说明,请浏览下面的我的帖子

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