莊周夢蝶

          生活、程序、未來
             :: 首頁 ::  ::  :: 聚合  :: 管理

          HDFS用戶指南(翻譯)

          Posted on 2008-08-14 20:24 dennis 閱讀(7076) 評論(2)  編輯  收藏 所屬分類: 模式與架構(gòu) 、java 、my open-source 、Hadoop與分布式
          HDFS用戶指南
          原文地址:http://hadoop.apache.org/core/docs/current/hdfs_user_guide.html
          譯者:dennis zhuang(killme2008@gmail.com),有錯誤請指正,多謝。

          目的

          本文檔可以作為使用Hadoop分布式文件系統(tǒng)用戶的起點,無論是將HDFS應用在一個Hadoop集群中還是作為一個單獨的分布式文件系統(tǒng)使用。HDFS被設(shè)計成可以馬上在許多環(huán)境中工作起來,那么一些HDFS的運行知識肯定能大大地幫助你對一個集群做配置改進和診斷。

          概覽

          HDFS是Hadoop應用的主要分布式存儲。一個HDFS集群由一個管理文件系統(tǒng)元數(shù)據(jù)的NameNode,和存儲實際 數(shù)據(jù)的一些Datanode組成。HDFS的架構(gòu)在這里有詳細描述。這個用戶指南主要提供給需要跟HDFS集群打交道的用戶或者管理員。HDFS架構(gòu)文章 中的圖描繪了Namenode、Datanode和客戶端們之間的基本交互。本質(zhì)上,客戶端與Namenode通訊獲取或者修改文件的元數(shù)據(jù),與 Datanode進行實際的IO操作。

          下面的列表應該是大多數(shù)用戶關(guān)心的HDFS突出特點。斜體字的術(shù)語將在后面詳細描述。

          1)Hadoop,包括HDFS,非常適合廉價機器上的分布式存儲和分布式處理。它是容錯的、可伸縮的,并且非常易于擴展。并且,以簡單性和適用性著稱的Map-Reduce是Hadoop不可或缺的組成部分。

          2)HDFS的默認配置適合于大多數(shù)安裝的應用。通常情況下,只有在一個非常大規(guī)模的集群上才需要修改默認配置。

          3)HDFS是用java編寫的,支持大多數(shù)平臺。

          4)支持shell命令行風格的HDFS目錄交互。

          5)Namenode和Datanode都內(nèi)建了web服務器,可以方便地查看集群的狀態(tài)

          6)HDFS經(jīng)常性地實現(xiàn)新的特性和改進,下面是HDFS中的一些有用特性的子集:

             文件許可和授權(quán)

             Rack awareness:當調(diào)度任務和分配存儲的時候?qū)⒐?jié)點的物理位置考慮進去。

             Safemode(安全模式):用于維護的一個管理狀態(tài)

             fsck: 診斷文件系統(tǒng)的一個工具,用來查找丟失的文件或者block

             Rebalancer:當數(shù)據(jù)在Datanode間沒有均勻分布的時候,用于重新平衡集群的工具

             升級和回滾:當Hadoop軟件升級,在升級遇到不可預期的問題的時候,可以回滾到HDFS升級前的狀態(tài)

             二級Namenode:幫助Namenode維持包含了HDFS修改的日志的文件(edits日志文件,下文談到)大小在限制范圍內(nèi)。

          前提條件

          下面的文檔描述了一個Hadoop集群的安裝和設(shè)置:


          本文檔的剩余部分假設(shè)你已經(jīng)搭設(shè)并運行了一個至少擁有一個Datanode的HDFS。基于本文檔的目的,Namenode和Datanode可以運行在同一臺機器上。

          Web接口

          Namenode和Datanode分別跑了一個內(nèi)置的web服務器,來展現(xiàn)集群當前狀態(tài)的一些基本信息。在默認配置 下,Namenode的首頁地址是http://namenode:50070(namenode就是Namenode節(jié)點所在機器IP或者名稱)。這個 頁面列出了集群中的所有datanode以及集群的基本統(tǒng)計。web接口同樣可以用于瀏覽文件系統(tǒng)(點擊Namenode首頁上的“Browse the file system"鏈接)。

          Shell命令

          Hadoop包括了多種shell風格的命令,用于跟HDFS或者Hadoop支持的其他文件系統(tǒng)交互。命令 bin/hadoop fs -help 可以列出Hadoop shell支持的命令。更進一步,bin/hadoop fs -help command 可以展現(xiàn)特定命令command的幫助細節(jié)。這些命令支持一般文件系統(tǒng)的操作,例如拷貝文件、修改文件權(quán)限等。同時也支持了部分HDFS特有的命令,例如 修改文件的replication因子。

          DFSAdmin命令

          'bin/hadoop dfsadmin' 命令支持一些HDFS管理功能的操作。'bin/hadoop dfsadmin -help'可以列出所有當前支持的命令。例如:

          • -report : 報告HDFS的基本統(tǒng)計信息。部分信息同時展現(xiàn)在Namenode的web首頁上。 
          • -safemode : 盡管通常并不需要,管理員還是可以通過手工操作進入或者離開safemode狀態(tài)
          • -finalizeUpgrade : 移除上一次升級時集群所做的備份。

          二級Namenode

          Namenode將對文件系統(tǒng)的修改存儲在一個原生文件系統(tǒng)文件中(名為edits的文件)。當Namenode啟動的時 候,它從映像文件(fsimage)讀取HDFS的狀態(tài),然后將edits日志文件中的修改作用在此內(nèi)存狀態(tài)上,接著將得到的新的HDFS狀態(tài)寫回 fsimage,后續(xù)的正常操作開始于一個空的edits日志文件。由于Namenode僅僅在啟動的時候?qū)simage和edits合并,因此在一個 大的集群上經(jīng)過一定時間操作后,edits文件將會非常大。由此帶來的一個副作用就是下次Namenode的重新啟動將花費很長時間。二級 Namenode就是為了解決這個問題,它會周期性地合并fsimage和edits日志文件,并且將edits日志文件的大小保持在限制范圍內(nèi)。通常它 會跑在另一個機器上,因為它的內(nèi)存要求跟主namenode一樣。二級Namenode可以通過'bin/start-dfs.sh'啟動在conf /masters配置文件里配置的節(jié)點上。

          Rebalancer

          HDFS的數(shù)據(jù)可能不會總是在Datanode之間分布得很一致。一個常見的原因是往現(xiàn)有的集群中加入了新的Datanode。當分配block的時候,Namenode依據(jù)幾個參數(shù)來決定哪個datanode來接受這些block。一些需要考慮的因素如下:

          1)一個block的副本存放在正在寫該block的節(jié)點上

          2)需要將一個block的副本擴展到其他機架上,防止因為整個機架故障導致的數(shù)據(jù)丟失。

          3)副本之一通常放在同一個機架的另一個節(jié)點上,減少跨機架的網(wǎng)絡IO

          4)將HDFS數(shù)據(jù)均勻一致地分布在集群中的datanode上。

              基于這些相互競爭的因素,數(shù)據(jù)可能不會在Datanode之間擴展得一致。HDFS給管理員提供了一個工具,用來分析block的分配情況和在datanode之間重新平衡數(shù)據(jù)。這個功能暫未實現(xiàn),它的描述可以在這個 PDF文檔中看到,記錄編號HADOOP-1652.

          Rack Awareness

          典型的大規(guī)模Hadoop集群是部署在數(shù)個機架上的,那么顯然同一個機架內(nèi)的節(jié)點間的網(wǎng)絡通訊比之不同機架間節(jié)點間的網(wǎng) 絡通訊更可取。另外,Namenode會嘗試將block的副本分布在數(shù)個機架中以提高容錯性。Hadoop讓集群管理員來決定某個節(jié)點從屬于哪個機架, 通過配置變量dfs.network.script來實現(xiàn)。當這個腳本有配置的時候,每個節(jié)點都運行該腳本來決定它的rackid。默認安裝假設(shè)所有的節(jié) 點從屬于同一個機架。這個特性和配置進一步的闡述在這個PDF文檔,編號為 HADOOP-692。

          Safemod(安全模式)

          當Namenode啟動的時候,它從fsimage和edits日志兩個文件中加載文件系統(tǒng)的狀態(tài)。然后等待 datanode報告他們的block信息,以便防止Namenode在確認block副本是否足夠前過早地開始復制block。這段時間的 Namenode就是處于所謂safemode狀態(tài)。處于safemode的Namenode也是HDFS集群的只讀模型,此時不允許任何對文件系統(tǒng)或者 block的修改。正常情況下,Namenode會在開始后自動退出safemode。如果有需要,HDFS可以通過'bin/hadoop dfsadmin -safemode'命令顯式地進入safemode狀態(tài)。Namenode的web首頁顯示當前的safemode是否打開。更詳細的描述和配置可以參 考setSafeMode()方法的JavaDoc。

          譯 注:詳細介紹下safemode的配置參數(shù),在safemode狀態(tài),Namenode會等待所有的datanode報告他們自己的block信息,看看 所有的block的副本是否達到最低要求的數(shù)目,這個數(shù)目可以通過dfs.replication.min參數(shù)配置,默認是1,也就是至少要求有一個副 本。當報告合格的Datanode的數(shù)目達到一定百分比,Namenode才會離開safemode狀態(tài)。這個百分比也是可配置的,通過 dfs.safemode.threshold.pct參數(shù),默認是0.999f(也就是要求99.9%的Datanode 合格)。Namenode在合格的datanode數(shù)目達到要求的時候,并不是馬上離開safemode狀態(tài),會有一個擴展時間,讓剩余的 datanode來報告block信息,這個擴展時間默認是30秒,可以通過dfs.safemode.extension參數(shù)配置,單位是毫秒。

          Fsck

          HDFS提供了fsck命令用來檢測各種各樣的不一致性。fsck被設(shè)計用來報告各種文件的問題,例如某個文件丟失的 block,block的副本數(shù)目是否低于設(shè)置等。不同于傳統(tǒng)的一般原生文件系統(tǒng)的fsck命令,hdfs的fsck命令并不修正所檢測到的錯誤。通常情 況下,Namenode會自動修正大多數(shù)可以被修復的錯誤,HDFS的fsck不是Hadoop shel的命令,可以通過'bin/hadoop fsck'執(zhí)行,可以運行在整個文件系統(tǒng)上或者一個文件子集上。

          升級和回滾

          當升級某個集群的Hadoop的時候,正如任何軟件的升級一樣,可能會引入新的bug或者不兼容的修改導致現(xiàn)有的應用出 現(xiàn)過去沒有發(fā)現(xiàn)的問題。在所有重要的HDFS安裝應用中,是不允許出現(xiàn)因丟失任何數(shù)據(jù)需要從零開始重啟HDFS的情況。HDFS允許管理員恢復到 Hadoop的早期版本,并且將集群的狀態(tài)回滾到升級前。HDFS的升級細節(jié)請參考 upgrade wiki。HDFS在任何時間只能有一個備份,因此在升級前,管理員需要通過'bin/hadoop dfsadmin -finalizeUpgrade'命令移除現(xiàn)有的備份。下面簡要描述了典型的升級過程:

          1)在升級Hadoop前,如果已經(jīng)存在備份,需要先結(jié)束(finalize)它。可以通過'dfsadmin -upgradeProgress status'命令查詢集群是否需要執(zhí)行finalize

          2)停止集群,分發(fā)部署新版本的Hadoop

          3)執(zhí)行新版本的hadoop,通過添加 -upgrade 選項,例如/bin/start-dfs.sh -upgrade

          4)大多數(shù)情況下,集群在升級后可以正常運行。一旦新的HDFS在運行若干天的操作后沒有出現(xiàn)問題,那么就可以結(jié)束(finalize)這次升級。請注意,在升級前刪除的文件并不釋放在datanode上的實際磁盤空間,直到集群被結(jié)束(finalize)升級前。

          5)如果有需要回到老版本的Hadoop,那么可以:

             a)停止集群,分發(fā)部署老版本的Hadoop

             b)通過rollback選項啟動集群,例如bin/start-dfs.sh -rollback

          文件許可和安全

          文件許可的設(shè)計與其他平臺(如linux) 的文件系統(tǒng)類似。在當前實現(xiàn),安全被限制在簡單的文件許可上。啟動Namenode的用戶被作為HDFS的超級用戶。HDFS的未來版本將支持網(wǎng)絡驗證, 例如Kerberos方案(譯注:MIT開發(fā)的一個驗證系統(tǒng))的用戶驗證以及數(shù)據(jù)傳輸?shù)募用?。更詳細的討論參?a id="o3qg166" >Permissions User and Administrator Guide。

          伸縮性

          Hadoop正運行在成千上萬個節(jié)點的集群上。 PoweredBy Hadoop列 出了一些部署Hadoop在大規(guī)模集群上的組織和機構(gòu)。HDFS在每個集群上只有一個Namenode節(jié)點,Namenode節(jié)點上可用內(nèi)存是當前伸縮性 的主要限制。在非常大規(guī)模的集群上,增加HDFS中存儲的文件的平均大小,將可以幫助提高集群的大小而不用增加Namenode的內(nèi)存需求。默認的配置可 能不適合非常大規(guī)模的集群應用。Hadoop FAQ頁列出了對于大規(guī)模Hadoop集群的配置改進建議。

          關(guān)聯(lián)文檔

           本用戶指南可作為使用HDFS很好的一個起點,在本文檔持續(xù)改進的同時,有一些非常有價值的關(guān)于Hadoop和HDFS的文檔資料可供參考。下列資料可作為進一步探索的起點:



          評論

          # re: HDFS用戶指南(翻譯)  回復  更多評論   

          2008-08-15 15:30 by 軒朗=maninred
          well done!

          # re: HDFS用戶指南(翻譯)  回復  更多評論   

          2008-08-17 18:03 by dell電腦
          well done!我給存起來了,以后要是能變成一本電子書就好了。
          主站蜘蛛池模板: 临朐县| 南丰县| 寿阳县| 固始县| 永济市| 武定县| 察哈| 津市市| 新安县| 阜新市| 筠连县| 边坝县| 棋牌| 西乌| 历史| 五华县| 夹江县| 云梦县| 镇平县| 三台县| 栾川县| 星子县| 大港区| 时尚| 邵阳县| 抚州市| 东乡| 龙州县| 阿巴嘎旗| 松原市| 临潭县| 宜兰市| 临高县| 九龙城区| 德庆县| 铜川市| 交城县| 庄河市| 楚雄市| 尼木县| 大厂|