Apache Hadoop文檔翻譯之三(用戶指南)

目的

該文檔是用戶使用Hadpoop分佈式文件系統(HDFS)的起點,不論是做爲hadoop集羣的一部分來使用仍是獨立的通用分佈式文件系統。雖然在不少場景下HDFS被設計成「正常工做」便可,可是掌握更多的HDFS工做機制將有利於更好的配置以及診斷。html

概述

HDFS是使用Hadoop程序來實現的分佈式存儲系統。一個HDFS集羣主要包含管理文件系統命名空間的Namenode以及存儲實際數據的Datanode。HDFS架構指南已經詳細介紹了HDFS。本用戶指南主要負責用戶、管理員與HDFS集羣之間交互的介紹。HDFS架構圖描述了Namenode、Datanode以及客戶端之間的基本交互。客戶端聯繫NameNode以獲取文件元數據或文件修改,並直接使用DataNodes執行實際文件I/O。前端

下面多是許多用戶感興趣的一些顯著特性。node

  • Hadoop,包括HDFS,適合使用一些商用主機進行分佈式存儲以及分佈式計算。它容錯率高而且很容易擴展。MapReduce因其簡單性和適用於大量分佈式應用程序而聞名,是Hadoop不可或缺的一部分。
  • HDFS是高度可配置的,同時提供了默認配置。大多數時候,只有在面對很是大的集羣時才須要進行一些配置。
  • Hadoop使用JAVA編寫並支持在全部主流平臺上運行。
  • Hadoop支持相似shell同樣的命令行與HDFS交互。
  • Namenode和Datanode內置web服務,便於檢查當前集羣狀態。
  • 在HDFS中按期實現新的特性和改進。下面即爲部分有用的特性:
    • 文件權限以及認證
    • 機架感知:在計劃任務和分配存儲時考慮節點的物理位置
    • 安全模式:一種維護管理模式
    • fsck:文件系統健康狀態診斷,發現丟失的文件或塊
    • fetchdt:得到Delegation token的工具,而且存儲到本地文件系統的文件中
    • Balancer:平衡集羣的工具,當數據在Datanode中不均勻分佈的時候
    • 升級以及回滾:當軟件升級後,HDFS可能須要回滾到升級前的狀態以預防一些位置問題
    • Secondary NameNode:按期檢查命名空間,並保持HDFS修改日誌的文件大小在Namenode限定範圍內。
    • 檢查點節點:按期檢查命名空間,並最小化Namenode上HDFS修改日誌的文件大小。充當之前由Secondary NameNode擔任的角色,雖然它尚未被加強。只要沒有向系統註冊備份節點,NameNode就能夠同時容許多個Checkpoint節點。
    • 備份節點:檢查點節點的擴展。除了檢查功能外,它還以數據流的形式接收來自Namanode的全部操做。備份節點在自身內存中保存命名空間的備份,而且這個備份跟活躍Namenode的命名空間保持同步。Namenode只容許一個備份節點註冊進來。

先決條件

下面的文檔介紹如何安裝和啓動一個Hadoop集羣:web

接下來的文檔假設用戶有能力搭建並運行至少有一個Datanode的HDFS。完成本文檔的學習,用戶能夠將Namenode和Datanode放在同一臺物理機上。shell

Web 接口

Namenode和Datanode內部都運行了web服務,用來展現集羣當前狀態的基本信息。默認配置下,Namenode的前端頁面請訪問http://namenode-name:50070/。 該頁面展現Datanode列表以及集羣的基本統計信息。這個web接口一樣能夠用來瀏覽文件系統(點擊頁面中的「Browse the file system」)。apache

Shell 命令

Hadoop包含豐富的類 shell 命令,用來跟HDFS和其餘Hadoop支持的文件系統進行直接交互。運行「bin/hdfs dfs -help」命令將列出Hadoop支持的命令。此外,運行「bin/hdfs dfs -help command-name」 展現「command-name」命令的詳細信息。這些命令支持大部分普通的文件系統操做,例如拷貝文件,修改文件權限等等。它還支持一些HDFS的特定操做,例如改變文件複製。詳細信息請查看 File System Shell Guide安全

DFSAdmin 命令

「bin/hdfs dfsadmin」 命令支持一些跟HDFS管理員相關的操做。「bin/hdfs dfsadmin -help」 命令會列出當前支持的全部命令。例如:架構

  • -report: HDFS基礎統計信息報告。報告中的一些信息一樣能夠在Namenode網頁上看到。
  • -safemode: 雖然一般不須要,但管理員能夠手動地方式進入或離開安全模式。
  • -finalizeUpgrade: 刪除上次集羣升級過程當中所作的備份。
  • -refreshNodes:
  • -printTopology :

更多信息,請查看 dfsadmin分佈式

Secondary NameNode

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的檢查點,主要被被兩個配置參數控制:

  • dfs.namenode.checkpoint.period,默認被設置爲1小時,指定兩個檢查點之間的最大間隔時間
  • dfs.namenode.checkpoint.txns,默認設置爲一百萬,定義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接口地址。

兩個配置參數影響檢查點的運行:

  • dfs.namenode.checkpoint.period,默認被設置爲1小時,指定兩個檢查點之間的最大間隔時間
  • dfs.namenode.checkpoint.txns,默認設置爲一百萬,定義Namenode上未檢查的事務數量,當達到該數量時進行強制檢查,即便是檢查間隔時間未到。

檢查點節點將最新的檢查點保存在與主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中。操做以下:

  • 在配置項「dfs.name.dir」指定的位置創建一個空文件夾
  • 在配置項「dfs.namenode.checkpoint.dir」指定檢查點的目錄位置
  • 使用「-importCheckpoint」參數啓動Namenode

NameNode會從fs.checkpoint.dir目錄讀取檢查點, 並把它保存在「dfs.name.dir」目錄下。若是dfs.name.dir目錄下有合法的fsimage,NameNode會啓動失敗。NameNode會檢查「fs.checkpoint.dir」目錄下鏡像文件的一致性,可是不會去改動它。

相信信息,請查看 namenode

平衡器

HDFS數據可能不會均勻地分佈在各個Datanode上。一個常見的緣由是一個新的Datanode加入到已經存在的集羣中。當須要給新的塊選擇位置,Namenode在選擇哪些Datanode來存放前會考慮多個因素:

  • 根據就近原則,將數據塊的一個副本放在正在寫這個數據塊的節點上
  • 考慮將塊數據放到不一樣機架上,以下降單機架故障風險
  • 一個副本一般被放置在和寫文件的節點同一機架的某個節點上,從而下降跨機架的帶寬消耗
  • 儘可能均勻地將HDFS數據分佈在集羣的DataNode中

因爲上述多種考慮須要取捨,數據可能並不會均勻分佈在DataNode中。HDFS爲管理員提供了一個工具,用於分析數據塊分佈和從新平衡DataNode上的數據分佈。HADOOP-1652 的附件中的一個PDF是一個簡要的rebalancer管理員指南。

詳細信息,請查看 balancer

相關文章
相關標籤/搜索