莊周夢(mèng)蝶

          生活、程序、未來
             :: 首頁 ::  ::  :: 聚合  :: 管理
              分布式文件系統(tǒng)的設(shè)計(jì)需求大概是這么幾個(gè):透明性、并發(fā)控制、可伸縮性、容錯(cuò)以及安全需求等。我想試試從這幾個(gè)角度去觀察HDFS的設(shè)計(jì)和實(shí)現(xiàn),可以更清楚地看出HDFS的應(yīng)用場(chǎng)景和設(shè)計(jì)理念。
              首先是透明性,如果按照開放分布式處理的標(biāo)準(zhǔn)確定就有8種透明性:訪問的透明性、位置的透明性、并發(fā)透明性、復(fù)制透明性、故障透明性、移動(dòng)透明性、性能透明性和伸縮透明性。對(duì)于分布式文件系統(tǒng),最重要的是希望能達(dá)到5個(gè)透明性要求:
          1)訪問的透明性:用戶能通過相同的操作來訪問本地文件和遠(yuǎn)程文件資源。HDFS可以做到這一點(diǎn),如果HDFS設(shè)置成本地文件系統(tǒng),而非分布式,那么讀寫 分布式HDFS的程序可以不用修改地讀寫本地文件,要做修改的是配置文件。可見,HDFS提供的訪問的透明性是不完全的,畢竟它構(gòu)建于java之上,不能 像NFS或者AFS那樣去修改unix內(nèi)核,同時(shí)將本地文件和遠(yuǎn)程文件以一致的方式處理。
          2)位置的透明性:使用單一的文件命名空間,在不改變路徑名的前提下,文件或者文件集合可以被重定位。HDFS集群只有一個(gè)Namenode來負(fù)責(zé)文件系 統(tǒng)命名空間的管理,文件的block可以重新分布復(fù)制,block可以增加或者減少副本,副本可以跨機(jī)架存儲(chǔ),而這一切對(duì)客戶端都是透明的。
          3)移動(dòng)的透明性,這一點(diǎn)與位置的透明性類似,HDFS中的文件經(jīng)常由于節(jié)點(diǎn)的失效、增加或者replication因子的改變或者重新均衡等進(jìn)行著復(fù)制或者移動(dòng),而客戶端和客戶端程序并不需要改變什么,Namenode的edits日志文件記錄著這些變更。
          4)性能的透明性和伸縮的透明性:HDFS的目標(biāo)就是構(gòu)建在大規(guī)模廉價(jià)機(jī)器上的分布式文件系統(tǒng)集群,可伸縮性毋庸置疑,至于性能可以參考它首頁上的一些benchmark。

              其次是并發(fā)控制,客戶端對(duì)于文件的讀寫不應(yīng)該影響其他客戶端對(duì)同一個(gè)文件的讀寫。要想實(shí)現(xiàn)近似原生文件系統(tǒng)的單個(gè)文件拷貝語義,分布式文件系統(tǒng)需要做出復(fù) 雜的交互,例如采用時(shí)間戳,或者類似回調(diào)承諾(類似服務(wù)器到客戶端的RPC回調(diào),在文件更新的時(shí)候;回調(diào)有兩種狀態(tài):有效或者取消。客戶端通過檢查回調(diào)承 諾的狀態(tài),來判斷服務(wù)器上的文件是否被更新過)。HDFS并沒有這樣做,它的機(jī)制非常簡(jiǎn)單,任何時(shí)間都只允許一個(gè)寫的客戶端,文件經(jīng)創(chuàng)建并寫入之后不再改 變,它的模型是write-one-read-many, 一次寫,多次讀。這與它的應(yīng)用場(chǎng)合是一致,HDFS的文件大小通常是兆至T級(jí)的,這些數(shù)據(jù)不會(huì)經(jīng)常修改,最經(jīng)常的是被順序讀并處理,隨機(jī)讀很少,因此 HDFS非常適合MapReduce框架或者web crawler應(yīng)用。HDFS文件的大小也決定了它的客戶端不能像某些分布式文件系統(tǒng)那樣緩存常用到的幾百個(gè)文件。

              第三,文件復(fù)制功能,一個(gè)文件可以表示為其內(nèi)容在不同位置的多個(gè)拷貝。這樣做帶來了兩個(gè)好處:訪問同個(gè)文件時(shí)可以從多個(gè)服務(wù)器中獲取從而改善服務(wù)的伸縮 性,另外就是提高了容錯(cuò)能力,某個(gè)副本損壞了,仍然可以從其他服務(wù)器節(jié)點(diǎn)獲取該文件。HDFS文件的block為了容錯(cuò)都將被備份,根據(jù)配置的 replication因子來,默認(rèn)是3。副本的存放策略也是很有講究,一個(gè)放在本地機(jī)架的節(jié)點(diǎn),一個(gè)放在同一機(jī)架的另一節(jié)點(diǎn),另一個(gè)放在其他機(jī)架上。這 樣可以最大限度地防止因故障導(dǎo)致的副本的丟失。不僅如此,HDFS讀文件的時(shí)候也將優(yōu)先選擇從同一機(jī)架乃至同一數(shù)據(jù)中心的節(jié)點(diǎn)上讀取block。

              第四,硬件和操作系統(tǒng)的異構(gòu)性。由于構(gòu)建在java平臺(tái)上,HDFS的跨平臺(tái)能力毋庸置疑,得益于java平臺(tái)已經(jīng)封裝好的文件IO系統(tǒng),HDFS可以在不同的操作系統(tǒng)和計(jì)算機(jī)上實(shí)現(xiàn)同樣的客戶端和服務(wù)端程序。

              第五,容錯(cuò)能力,在分布式文件系統(tǒng)中,盡量保證文件服務(wù)在客戶端或者服務(wù)端出現(xiàn)問題的時(shí)候能正常使用是非常重要的。HDFS的容錯(cuò)能力大概可以分為兩個(gè)方面:文件系統(tǒng)的容錯(cuò)性以及Hadoop本身的容錯(cuò)能力。文件系統(tǒng)的容錯(cuò)性通過這么幾個(gè)手段:
          1)在Namenode和Datanode之間維持心跳檢測(cè),當(dāng)由于網(wǎng)絡(luò)故障之類的原因,導(dǎo)致Datanode發(fā)出的心跳包沒有被Namenode正常收 到的時(shí)候,Namenode就不會(huì)將任何新的IO操作派發(fā)給那個(gè)Datanode,該Datanode上的數(shù)據(jù)被認(rèn)為是無效的,因此Namenode會(huì)檢 測(cè)是否有文件block的副本數(shù)目小于設(shè)置值,如果小于就自動(dòng)開始復(fù)制新的副本并分發(fā)到其他Datanode節(jié)點(diǎn)。
          2)檢測(cè)文件block的完整性,HDFS會(huì)記錄每個(gè)新創(chuàng)建的文件的所有block的校驗(yàn)和。當(dāng)以后檢索這些文件的時(shí)候,從某個(gè)節(jié)點(diǎn)獲取block,會(huì)首先確認(rèn)校驗(yàn)和是否一致,如果不一致,會(huì)從其他Datanode節(jié)點(diǎn)上獲取該block的副本。
          3)集群的負(fù)載均衡,由于節(jié)點(diǎn)的失效或者增加,可能導(dǎo)致數(shù)據(jù)分布的不均勻,當(dāng)某個(gè)Datanode節(jié)點(diǎn)的空閑空間大于一個(gè)臨界值的時(shí)候,HDFS會(huì)自動(dòng)從其他Datanode遷移數(shù)據(jù)過來。
          4)Namenode上的fsimage和edits日志文件是HDFS的核心數(shù)據(jù)結(jié)構(gòu),如果這些文件損壞了,HDFS將失效。因而,Namenode可以配置成支持維護(hù)多 個(gè)FsImageEditlog的拷貝。任何對(duì)FsImage或者Editlog的修改,都將同步到它們的副本上。它總是選取最近的一致的FsImageEditlog使用。NamenodeHDFS是單點(diǎn)存在,如果Namenode所在的機(jī)器錯(cuò)誤,手工的干預(yù)是必須的。
          5)文件的刪除,刪除并不是馬上從Namenode移出namespace,而是放在/trash目錄隨時(shí)可恢復(fù),直到超過設(shè)置時(shí)間才被正式移除。
              再說Hadoop本身的容錯(cuò)性,Hadoop支持升級(jí)和回滾,當(dāng)升級(jí)Hadoop軟件時(shí)出現(xiàn)bug或者不兼容現(xiàn)象,可以通過回滾恢復(fù)到老的Hadoop版本。
              最后一個(gè)就是安全性問題,HDFS的安全性是比較弱的,只有簡(jiǎn)單的與unix文件系統(tǒng)類似的文件許可控制,未來版本會(huì)實(shí)現(xiàn)類似NFS的kerberos驗(yàn)證系統(tǒng)。

              總結(jié)下:HDFS作為通用的分布式文件系統(tǒng)并不適合,它在并發(fā)控制、緩存一致性以及小文件讀寫的效率上是比較弱的。但是它有自己明確的設(shè)計(jì)目標(biāo),那就是支 持大的數(shù)據(jù)文件(兆至T級(jí)),并且這些文件以順序讀為主,以文件讀的高吞吐量為目標(biāo),并且與MapReduce框架緊密結(jié)合。



            

          評(píng)論

          # re: 從HDFS看分布式文件系統(tǒng)的設(shè)計(jì)需求  回復(fù)  更多評(píng)論   

          2008-08-15 23:31 by Arbow
          回家也不忘翻譯,好勤奮!

          # re: 從HDFS看分布式文件系統(tǒng)的設(shè)計(jì)需求  回復(fù)  更多評(píng)論   

          2008-08-16 09:10 by 岑文初
          不錯(cuò)

          # re: 從HDFS看分布式文件系統(tǒng)的設(shè)計(jì)需求  回復(fù)  更多評(píng)論   

          2008-08-17 18:01 by dell筆記本
          最后的總結(jié)也很到位。
          主站蜘蛛池模板: 芷江| 镇平县| 喜德县| 彰武县| 玛曲县| 延川县| 绩溪县| 永年县| 南岸区| 碌曲县| 轮台县| 仙居县| 固镇县| 敖汉旗| 滨州市| 邵东县| 永新县| 凉城县| 石泉县| 诸城市| 垣曲县| 安岳县| 九江县| 务川| 称多县| 罗源县| 东乡| 平顶山市| 鲜城| 瑞昌市| 长宁县| 朔州市| 阳东县| 大城县| 东源县| 正安县| 西充县| 江川县| 江口县| 南宁市| 鹤壁市|