該文檔是用戶使用Hadpoop分佈式文件系統(HDFS)的起點,不論是做爲hadoop集羣的一部分來使用仍是獨立的通用分佈式文件系統。雖然在不少場景下HDFS被設計成「正常工做」便可,可是掌握更多的HDFS工做機制將有利於更好的配置以及診斷。html
HDFS是使用Hadoop程序來實現的分佈式存儲系統。一個HDFS集羣主要包含管理文件系統命名空間的Namenode以及存儲實際數據的Datanode。HDFS架構指南已經詳細介紹了HDFS。本用戶指南主要負責用戶、管理員與HDFS集羣之間交互的介紹。HDFS架構圖描述了Namenode、Datanode以及客戶端之間的基本交互。客戶端聯繫NameNode以獲取文件元數據或文件修改,並直接使用DataNodes執行實際文件I/O。前端
下面多是許多用戶感興趣的一些顯著特性。node
下面的文檔介紹如何安裝和啓動一個Hadoop集羣:web
接下來的文檔假設用戶有能力搭建並運行至少有一個Datanode的HDFS。完成本文檔的學習,用戶能夠將Namenode和Datanode放在同一臺物理機上。shell
Namenode和Datanode內部都運行了web服務,用來展現集羣當前狀態的基本信息。默認配置下,Namenode的前端頁面請訪問http://namenode-name:50070/。 該頁面展現Datanode列表以及集羣的基本統計信息。這個web接口一樣能夠用來瀏覽文件系統(點擊頁面中的「Browse the file system」)。apache
Hadoop包含豐富的類 shell 命令,用來跟HDFS和其餘Hadoop支持的文件系統進行直接交互。運行「bin/hdfs dfs -help」命令將列出Hadoop支持的命令。此外,運行「bin/hdfs dfs -help command-name」 展現「command-name」命令的詳細信息。這些命令支持大部分普通的文件系統操做,例如拷貝文件,修改文件權限等等。它還支持一些HDFS的特定操做,例如改變文件複製。詳細信息請查看 File System Shell Guide安全
「bin/hdfs dfsadmin」 命令支持一些跟HDFS管理員相關的操做。「bin/hdfs dfsadmin -help」 命令會列出當前支持的全部命令。例如:架構
更多信息,請查看 dfsadmin分佈式
Namenode以日誌的形式存儲更新信息,該日誌信息追加到本地文件edits中。當Namenode啓動,它從一個稱爲「FsImage」的image文件中讀取HDFS狀態,而後使用編輯日誌文件中的修改信息。隨後,寫入新的HDFS狀態到FsImage文件中並使用一個新的空的的edits文件開始常規操做。由於Namenode只在啓動的時候才合併Fsimage和edits文件,在一個工做頻繁的集羣上edits日誌文件會變得很是龐大,這會致使Namenode下次重啓時會花費很長時間。ide
Secondary NameNode按期合併Fsimage和edits文件,並保持edits文件大小在一個限定範圍內。Secondary NameNode一般運行在與主Namenode不一樣的機器上,由於Secondary NameNode須要相同大的內存來保證其運行。
啓動運行在Secondary NameNode的檢查點,主要被被兩個配置參數控制:
Secondary NameNode將最新的檢查點保存在與主Namenode項目的文件路徑下。因此,當須要時NameNode能夠隨時讀取Secondary NameNode上的檢查點image文件。
詳細信息,請查看Secondary NameNode
Namenode經過兩種文件來維持命名空間:fsimage以及journal (log)。其中,fsimage是命名空間的最大檢查點以及編輯文件,journal則記錄自上一個檢查點以後的更新操做。當NameNode啓動時,它會合並fsimage和edits journal以提供文件系統元數據的最新視圖。NameNode而後用新的HDFS狀態覆蓋fsimage並開始一個新的編輯日誌。
檢查點節點按期建立命名空間的檢查點。它從活躍的Namenode上下載fsimage和edits,而後在本地進行合併,最後上傳最新的fsimage到活躍的Namenode上。檢查點節點一般運行在與主Namenode不一樣的機器上,由於檢查點節點須要相同大的內存來保證其運行。用戶能夠在配置文件指定的節點上運行「bin/hdfs namenode -checkpoint」來啓動檢查點節點。
「dfs.namenode.backup.address」和「dfs.namenode.backup.http-address」配置屬性能夠指定檢查點節點的位置以及其web接口地址。
兩個配置參數影響檢查點的運行:
檢查點節點將最新的檢查點保存在與主Namenode項目的文件路徑下。因此,當須要時NameNode能夠隨時讀取檢查點節點上的檢查點image文件。
集羣配置文件中能夠同時指定多個檢查點。
詳細信息,請查看 namenode
備份節點跟檢查點節點同樣提供相同的檢查功能,將相關信息保存在內存中,更新命名空間的拷貝並與活躍Namenode狀態保持同步。除了接受來自NameNode的文件系統編輯的日誌流並將其持久保存到磁盤以外,備份節點還將這些編輯應用到其本身的內存中命名空間的副本中,從而建立命名空間的備份。
備份節點不須要像Secondary NameNode和Checkpoint node同樣從活動NameNode下載fsimage和編輯文件,以便建立檢查點,由於它已經保存命名空間的最新狀態在內存中。備份節點進程更高效,由於它只須要將命名空間保存到本地fsimage文件中並重置編輯。
由於備份節點須要將命名空間保存在內存中,因此它須要跟Namenode同樣的內存大小。
Namenode一次只支持一個備份節點。當備份節點在使用時,咱們就無需檢查點節點。同時支持多個備份節點將在將來實現。
備份節點的配置方式與檢查點節點相同。咱們可使用「bin/hdfs namenode -backup」來啓動備份節點。
「dfs.namenode.backup.address」和「dfs.namenode.backup.http-address」配置屬性能夠指定備份節點的位置以及其web接口地址。
備份節點提供了使NameNode運行時不須要進行持久化的選項,將保留命名空間狀態的全部責任委派給備份節點。要執行此操做,請使用-importCheckpoint選項來啓動NameNode,併爲edits類型設置非持久性存儲目錄 dfs.namenode.edits.dir。
關於備份節點和檢查點節點的產生緣由的討論,查看 HADOOP-4539
若是fsimage和edits文件的備份丟失,咱們能夠將最新的檢查點導入到Namenode中。操做以下:
NameNode會從fs.checkpoint.dir目錄讀取檢查點, 並把它保存在「dfs.name.dir」目錄下。若是dfs.name.dir目錄下有合法的fsimage,NameNode會啓動失敗。NameNode會檢查「fs.checkpoint.dir」目錄下鏡像文件的一致性,可是不會去改動它。
相信信息,請查看 namenode
HDFS數據可能不會均勻地分佈在各個Datanode上。一個常見的緣由是一個新的Datanode加入到已經存在的集羣中。當須要給新的塊選擇位置,Namenode在選擇哪些Datanode來存放前會考慮多個因素:
因爲上述多種考慮須要取捨,數據可能並不會均勻分佈在DataNode中。HDFS爲管理員提供了一個工具,用於分析數據塊分佈和從新平衡DataNode上的數據分佈。HADOOP-1652 的附件中的一個PDF是一個簡要的rebalancer管理員指南。
詳細信息,請查看 balancer