HDFS某些地方為了性能可能會不符合POSIX(是的,你沒有看錯,POSIX不僅僅只適用于linux/unix,Hadoop 使用了POSIX的設計來實現(xiàn)對文件系統(tǒng)文件流的讀取),所以它看起來可能與你所期望的不同,要注意。
創(chuàng)建了一個文件以后,它是可以在命名空間(namespace)中可以看到的:
Path p = new Path("p"); fs.create(p); assertThat(fs.exists(p), is(true));
但是任何向此文件中寫入的數(shù)據(jù)并不能保證是可見的,即使你flush了已經(jīng)寫入的數(shù)據(jù),此文件的長度可能仍然為零:
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數(shù)據(jù)量的數(shù)據(jù)被寫入文件后,此文件中的內(nèi)容才是可見的(即這些數(shù)據(jù)會被寫入到硬盤中去),所以當前正在寫的block中的內(nèi)容總是不可見的。
Hadoop提供了一種強制使buffer中的內(nèi)容沖洗到datanode的方法,那就是FSDataOutputStream的sync()方法。調(diào)用了sync()方法后,Hadoop保證所有已經(jīng)被寫入的數(shù)據(jù)都被沖洗到了管道線中的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系統(tǒng)調(diào)用(它沖洗給定文件描述符中的所有緩沖數(shù)據(jù)到磁盤中)。例如,使用java API寫一個本地文件,我們可以保證在調(diào)用flush()和同步化后可以看到已寫入的內(nèi)容:
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中關閉一個流隱式的調(diào)用了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中的一致性模型限制,如果我們不調(diào)用sync()方法的話,我們很可能會丟失多大一個block的數(shù)據(jù)。這是難以接受的,所以我們應該使用sync()方法來確保數(shù)據(jù)已經(jīng)寫入磁盤。但頻繁調(diào)用sync()方法也是不好的,因為會造成很多額外開銷。我們可以再寫入一定量數(shù)據(jù)后調(diào)用sync()方法一次,至于這個具體的數(shù)據(jù)量大小就要根據(jù)你的應用程序而定了,在不影響你的應用程序的性能的情況下,這個數(shù)據(jù)量應越大越好。
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
網(wǎng)站題目:Hadoop之HDFS之一致性模型-創(chuàng)新互聯(lián)
網(wǎng)頁網(wǎng)址:http://m.rwnh.cn/article16/djiodg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設計公司、網(wǎng)頁設計公司、云服務器、動態(tài)網(wǎng)站、營銷型網(wǎng)站建設、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容