91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Hadoop之HDFS之一致性模型

發布時間:2020-06-15 22:18:35 來源:網絡 閱讀:7693 作者:wangwei4078 欄目:大數據

    HDFS某些地方為了性能可能會不符合POSIX(是的,你沒有看錯,POSIX不僅僅只適用于linux/unix,Hadoop 使用了POSIX的設計來實現對文件系統文件流的讀取),所以它看起來可能與你所期望的不同,要注意。
    創建了一個文件以后,它是可以在命名空間(namespace)中可以看到的:

Path p = new Path("p");
fs.create(p);
assertThat(fs.exists(p), is(true));

    但是任何向此文件中寫入的數據并不能保證是可見的,即使你flush了已經寫入的數據,此文件的長度可能仍然為零:

Path p = new Path("p");
OutputStream out = fs.create(p);
out.write("content".getBytes("UTF-8"));
out.flush();
assertThat(fs.getFileStatus(p).getLen(), is(0L));

  這是因為,在Hadoop中,只有滿一個block數據量的數據被寫入文件后,此文件中的內容才是可見的(即這些數據會被寫入到硬盤中去),所以當前正在寫的block中的內容總是不可見的。
  Hadoop提供了一種強制使buffer中的內容沖洗到datanode的方法,那就是FSDataOutputStream的sync()方法。調用了sync()方法后,Hadoop保證所有已經被寫入的數據都被沖洗到了管道線中的datanode中,并且對所有讀者都可見了:

Path p = new Path("p");
FSDataOutputStream out = fs.create(p);
out.write("content".getBytes("UTF-8"));
out.flush();
out.sync();
assertThat(fs.getFileStatus(p).getLen(), is(((long) "content".length())));

    
  這個方法就像POSIX中的fsync系統調用(它沖洗給定文件描述符中的所有緩沖數據到磁盤中)。例如,使用java API寫一個本地文件,我們可以保證在調用flush()和同步化后可以看到已寫入的內容:

FileOutputStream out = new FileOutputStream(localFile);
out.write("content".getBytes("UTF-8"));
out.flush(); // flush to operating system
out.getFD().sync(); // sync to disk(getFD()返回與該流所對應的文件描述符)
assertThat(localFile.length(), is(((long) "content".length())));

  在HDFS中關閉一個流隱式的調用了sync()方法:

Path p = new Path("p");
OutputStream out = fs.create(p);
out.write("content".getBytes("UTF-8"));
out.close();
assertThat(fs.getFileStatus(p).getLen(), is(((long) "content".length())));

  由于Hadoop中的一致性模型限制,如果我們不調用sync()方法的話,我們很可能會丟失多大一個block的數據。這是難以接受的,所以我們應該使用sync()方法來確保數據已經寫入磁盤。但頻繁調用sync()方法也是不好的,因為會造成很多額外開銷。我們可以再寫入一定量數據后調用sync()方法一次,至于這個具體的數據量大小就要根據你的應用程序而定了,在不影響你的應用程序的性能的情況下,這個數據量應越大越好。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阿坝县| 潞西市| 山西省| 廊坊市| 达孜县| 修水县| 阳城县| 平泉县| 元阳县| 九龙县| 江口县| 光泽县| 称多县| 上林县| 江安县| 涿鹿县| 曲沃县| 深泽县| 崇义县| 任丘市| 外汇| 余姚市| 天祝| 长阳| 连云港市| 湘潭县| 湘潭市| 鹤壁市| 江永县| 九龙坡区| 阿拉善右旗| 屯门区| 汝城县| 屏山县| 乌恰县| 罗山县| 通化县| 白沙| 汉沽区| 大同县| 汶上县|