HDFS Client 设计实现解析
前面對(duì) HDFS NameNode 和 DataNode 的架構(gòu)設(shè)計(jì)實(shí)現(xiàn)要點(diǎn)做了介紹,本文對(duì) HDFS 最后一個(gè)主要構(gòu)成組件 Client 做進(jìn)一步解析。
流式讀取
HDFS Client 為客戶端應(yīng)用提供一種流式讀取模型,就像訪問(wèn)本機(jī)文件系統(tǒng)一樣來(lái)訪問(wèn) HDFS。將復(fù)雜的分布式文件系統(tǒng)讀取細(xì)節(jié)隱藏,簡(jiǎn)化了上層應(yīng)用的使用難度。寫(xiě)過(guò)讀取本機(jī)文件的程序員想必都很熟悉流式讀取的編程模型,就不多說(shuō)了。
錯(cuò)誤處理
相比讀取本機(jī)文件系統(tǒng),從分布式文件系統(tǒng)讀取出錯(cuò)概率會(huì)更高。因此 HDFS Client 提供了一些附加功能來(lái)提升分布式文件系統(tǒng)讀取訪問(wèn)的可用性。在從某個(gè) DataNode 讀取數(shù)據(jù)的過(guò)程中若發(fā)生錯(cuò)誤異常,Client 會(huì)透明的轉(zhuǎn)移到距離第二接近的 DataNode 上,并記住第一個(gè) DataNode 讀取失敗,后續(xù)的 blocks 讀取將不再嘗試該 DataNode。除此之外 Client 對(duì)于讀到的每個(gè) block 進(jìn)行 checksum 校驗(yàn),若讀到損壞的 block,則向 NameNode 匯報(bào),并嘗試從其他副本重新讀取。
緩沖寫(xiě)入
創(chuàng)建文件并寫(xiě)入數(shù)據(jù)的操作并不是直接連到 DataNode 同步遠(yuǎn)程寫(xiě)入的,而是通過(guò)寫(xiě)入本地的一個(gè)臨時(shí)文件來(lái)作緩沖。我們寫(xiě)本地文件也經(jīng)常使用一種 BufferedWriter 來(lái)提高寫(xiě)入吞吐能力。本質(zhì)上都是為了解決數(shù)據(jù)生產(chǎn)端和數(shù)據(jù)接收端處理能力的差異,在單機(jī)情況下磁盤(pán)操作慢,所以用內(nèi)存 buffer 來(lái)緩沖。在分布式環(huán)境下,不僅要考慮磁盤(pán)還要考慮網(wǎng)絡(luò),所以用本地內(nèi)存加上本地磁盤(pán)文件來(lái)做緩沖。
應(yīng)用寫(xiě) HDFS 的操作被透明的轉(zhuǎn)移到寫(xiě)入本地文件,當(dāng)本地文件積累的數(shù)據(jù)超過(guò)一個(gè) block 的大小后,Client 才請(qǐng)求 NameNode 分配 DataNodes,Client 再將本地文件的數(shù)據(jù)一次性的發(fā)送到對(duì)應(yīng)的 DataNodes 流水線處理。這實(shí)際是將同步寫(xiě)轉(zhuǎn)變成了異步寫(xiě)過(guò)程,提高了寫(xiě)入吞吐性能。
當(dāng)文件被關(guān)閉后,在 Client 端臨時(shí)文件中剩下的數(shù)據(jù)將被傳輸給 DataNode。然后 Client 告知 NameNode 文件已關(guān)閉,寫(xiě)入完成。NameNode 此時(shí)才將新寫(xiě)入的文件持久化,若在文件關(guān)閉前 NameNode 宕機(jī),則正在寫(xiě)入的文件算作丟失了。
總結(jié)
Client 在 HDFS 的三個(gè)主要部件中相對(duì)簡(jiǎn)單,在設(shè)計(jì)實(shí)現(xiàn)時(shí)更多考慮易用性、容錯(cuò)和性能。
至此,對(duì) HDFS 的三個(gè)主要部件 NameNode、DataNode 和 Client 的設(shè)計(jì)實(shí)現(xiàn)要點(diǎn)進(jìn)行了講述,
后續(xù)會(huì)以主題文章對(duì)其中一些關(guān)鍵的技術(shù)點(diǎn)做進(jìn)一步剖析。
參考
[1] Hadoop Documentation. HDFS Architecture.
[2] Robert Chansler, Hairong Kuang, Sanjay Radia, Konstantin Shvachko, and Suresh Srinivas. The Hadoop Distributed File System
[3] Tom White. Hadoop: The Definitive Guide. O’Reilly Media(2012-05), pp 94-96
下面是我自己開(kāi)的一個(gè)微信公眾號(hào) [瞬息之間],除了寫(xiě)技術(shù)的文章、還有產(chǎn)品的、行業(yè)和人生的思考,希望能和更多走在這條路上同行者交流,有興趣可關(guān)注一下,謝謝。
版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。
?
轉(zhuǎn)載于:https://www.cnblogs.com/mindwind/p/4833099.html
總結(jié)
以上是生活随笔為你收集整理的HDFS Client 设计实现解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: EntityFramework Code
- 下一篇: HDU1248 寒冰王座 【数学题】or