亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

新民市| 夏河县| 丹巴县| 金阳县| 焦作市| 常熟市| 腾冲县| 凤城市| 夹江县| 南阳市| 依安县| 咸宁市| 特克斯县| 三都| 赣榆县| 三河市| 潢川县| 渝北区| 凤山市| 建平县| 南召县| 林口县| 汪清县| 耿马| 宁陕县| 武胜县| 望谟县| 桃江县| 临安市| 静海县| 大竹县| 丹江口市| 福建省| 壶关县| 江源县| 柞水县| 溧水县| 雅安市| 左云县| 西华县| 县级市|