1. 程式人生 > >hadoop-2.7.4-翻譯文件-聯邦HDFS

hadoop-2.7.4-翻譯文件-聯邦HDFS

背景

HDFS圖層

HDFS有兩個主要層:

  • 名字空間
    • 包含目錄,檔案和塊資訊。
    • 它支援所有名字空間相關的檔案系統操作,如建立,刪除,修改和列出檔案和目錄。
  • 塊儲存服務有兩部分:

    • 塊管理(在Namenode中執行)
      • 通過處理註冊和週期性心跳資訊來提供Datanode叢集成員管理服務。
      • 處理塊報告並持久儲存塊的位置資訊。
      • 支援塊相關操作,如增、刪、改、查。
      • 管理塊副本的存放,對副本數不足的塊進行復制,以及對副本數超量的塊進行副本刪除。
    • 塊儲存 - 由Datanodes提供服務,通過在本地檔案系統上進行塊儲存,並提供讀/寫訪問來實現。

    之前的HDFS架構只執行一個NN來對整個叢集提供支援。在該配置下,單個NN管理整個名字空間。而聯邦HDFS通過向HDFS新增對多個Namenodes/namespaces的支援,解決了此限制。

多個Namenodes/namespaces

為了水平副檔名稱服務,聯邦模式使用多個獨立的Namenodes/namespaces。多個Namenode之間組成了一個聯盟,並且各個Namenode之間是獨立的,不需要相互協調。Datanodes被所有Namenodes通用,來做塊的儲存工作。

每個Datanode向叢集中所有的NameNode發起註冊,並向其傳送週期性的心跳和塊報告,同事還處理Namenodes發來的命令。

使用者可以使用ViewFs來建立個性化的名稱空間檢視ViewFs類似於某些Unix / Linux系統中的客戶端安裝表。

ViewFS使用參照 http://blog.csdn.net/anyuzun/article/details/78109320 。


HDFS聯合體繫結構

塊池

單個塊池是屬於單個名字空間的一個元件。Datanodes為叢集中所有的塊池提供塊儲存服務。每個塊池都是獨立管理的。這將允許名字空間為新塊生成塊ID,並且不需要與其他名字空間協調。叢集中單個

Namenode故障不會阻止Datanode繼續向其他Namenode提供服務。

名字空間及其所屬塊池統稱為名字空間卷。這是一個獨立的管理單位。當Namenode或名字空間被刪除時,在Datanodes中其相應的塊池也被刪除。在叢集升級期間,每個名字空間卷都將作為單獨一個單元進行升級。

叢集ID

叢集ID用於識別該叢集中的所有節點。當一個Namenode被格式化時時,其叢集ID被主動提供或自動生成。該ID將用於格式化其他的Namenodes到叢集。

主要優點

  • 名字空間的可擴充套件性 - 聯邦模式水平拓展了NameSpace。在叢集中通過增加NameNode來水平拓展名字空間,使得大型叢集或包含多量小檔案的叢集得以受益。
  • 效能的提高 - 檔案系統的吞吐量不再受單個Namenode限制。向叢集新增更多的Namenode大大提高了檔案系統的讀/寫吞吐量。
  • 隔離性 - 單個Namenode並不能在多使用者環境中提供隔離。例如,一個實驗階段的應用程式可能會使生產環境的應用程式達到超載。通過使用多個Namenode,可以使得不同類別的應用程式和使用者隔離到不同的名字空間中去。

聯邦配置

聯盟配置向後相容並允許單個Namenode使用現有的配置繼續工作,而無需任何變化。新的配置模式使得叢集中的所有節點具有相同的配置,不需要根據叢集中的節點型別部署不同而做出改變。

聯邦模式添加了一個新的NameServiceID抽象。一個Namenode及其對應的secondary/backup/checkpointer節點都屬於同一個NameServiceId。為了支援多個NameNode配置寫入到單個配置檔案中,Namenode和其附屬節點r配置引數均新增NameServiceID作為字尾

配置

步驟1:將dfs.nameservices引數新增到配置檔案中,並使用逗號分隔的NameServiceID列表進行配置。Datanodes將使用此配置來確定叢集中的Namenode。

步驟2:對於每個Namenode和其附屬節點的配置資訊,以相應的NameServiceID為字尾,新增到通用配置檔案中:

守護程序 配置引數
Namenode dfs.namenode.rpc-address 
dfs.namenode.servicerpc-address 
dfs.namenode.http-address 
dfs.namenode.https-address 
dfs.namenode.keytab.file 
dfs.namenode.name.dir 
dfs.namenode.edits.dir 
dfs.namenode.checkpoint.dir 
dfs.namenode.checkpoint.edits.dir
Secondary Namenode dfs.namenode.secondary.http-address 
dfs.secondary.namenode.keytab.file
BackupNode dfs.namenode.backup.address 
dfs.secondary.namenode.keytab.file

這是一個包含雙Namenode的配置示例:

<configuration>
  <property>
    <name>dfs.nameservices</name>
    <value>ns1,ns2</value>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.ns1</name>
    <value>nn-host1:rpc-port</value>
  </property>
  <property>
    <name>dfs.namenode.http-address.ns1</name>
    <value>nn-host1:http-port</value>
  </property>
  <property>
    #官網中此配置少了一個 "." ,我也是無語了。以下是正確配置。
    <name>dfs.namenode.secondary.http-address.ns1</name>
    <value>snn-host1:http-port</value>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.ns2</name>
    <value>nn-host2:rpc-port</value>
  </property>
  <property>
    <name>dfs.namenode.http-address.ns2</name>
    <value>nn-host2:http-port</value>
  </property>
  <property>
    <name>dfs.namenode.secondary.http-address.ns2</name>
    <value>snn-host2:http-port</value>
  </property>

  .... Other common configuration ...
</configuration>

格式化Namenode

步驟1:使用以下命令格式化Namenode:

[hdfs]$ $HADOOP_PREFIX/bin/hdfs namenode -format [-clusterId <cluster_id>]

選擇一個不會與其他叢集發生衝突的cluster_id。如果未提供cluster_id,則會自動生成。

步驟2:使用以下命令格式化其他的Namenodes:

[hdfs]$ $HADOOP_PREFIX/bin/hdfs namenode -format -clusterId <cluster_id>

請注意,步驟2中的cluster_id必須與步驟1中的cluster_id相同。如果它們不同,則附加的Namenode不會成為聯邦叢集的一部分。

從舊版本升級為聯邦叢集

較舊的版本只支援單個Namenode。需要將叢集升級到較新版本以啟用聯邦模式,在升級期間,您可以使用如下的ClusterID:

[hdfs]$ $HADOOP_PREFIX/bin/hdfs start namenode --config $HADOOP_CONF_DIR  -upgrade -clusterId <cluster_ID>

如果未提供cluster_id,則會自動生成。

將新的Namenode新增到現有的HDFS叢集

執行以下步驟:

  • dfs.nameservices引數新增到配置檔案中。

  • 使用NameServiceID字尾更新配置。配置鍵名稱已更改為0.20釋出版本。您必須使用新的配置引數名才能啟用聯邦模式。

  • 將新的Namenode相關配置資訊新增到配置檔案中。

  • 將配置檔案分發到叢集中的所有節點。

  • 啟動新的Namenode及其附屬節點。

  • 通過對叢集中的所有Datanode執行以下命令,來重新整理Datanode以使其獲取新新增的Namenode:

    [hdfs]$ $HADOOP_PREFIX/bin/hdfs dfsadmin -refreshNameNodes <datanode_host_name>:<datanode_rpc_port>

管理叢集

啟動和停止叢集

要啟動叢集,請執行以下命令:

[hdfs]$ $HADOOP_PREFIX/sbin/start-dfs.sh

要停止叢集,請執行以下命令:

[hdfs]$ $HADOOP_PREFIX/sbin/stop-dfs.sh

這些命令可以在擁有HDFS配置檔案的任何節點執行。該命令使用配置檔案來確定叢集中的Namenode節點,然後在這些節點上啟動Namenode程序。DataNode則在[slaves]檔案中獲取節點資訊,並在指定的節點上啟動該指令碼可參考用來構建自己的指令碼以啟動和停止叢集。

平衡器

使用多個NameNode時,平衡器已經發生更改。可以使用以下命令執行平衡器:

[hdfs]$ $HADOOP_PREFIX/sbin/hadoop-daemon.sh start balancer [-policy <policy>]

策略引數可以是以下任一項:

  • datanode - 這是預設策略。這樣可以在DataNode級別平衡儲存空間。這與以前版本的平衡策略相似。

  • blockpool -這將在塊池級別平衡儲存空間,同時也對Datanode級別的儲存空間進行平衡。

請注意,平衡器僅平衡資料,不會平衡名字空間。有關完整的命令用法,請參閱平衡器文件

退役

退役類似於以前的版本。將需要退役的節點新增到所有Namenodes的[exclude]檔案中。每個Namenode將會退役其對應的Block Pool。當所有Namenode完成DataNode的退役後,Datanode宣告退役。

步驟1:要將排除檔案分發到所有的Namenodes,請使用以下命令:

[hdfs]$ $HADOOP_PREFIX/sbin/distribute-exclude.sh <exclude_file>

步驟2:重新整理所有的Namenode以接收新的排除檔案:

[hdfs]$ $HADOOP_PREFIX/sbin/refresh-namenodes.sh

上述命令使用HDFS配置資訊來確定叢集中的Namenode,並重新整理它們來接收新的排除檔案。

叢集Web控制檯

與Namenode狀態網頁類似,當使用聯邦叢集時,可以通過訪問 http://<any_nn_host:port>/dfsclusterhealth.jsp 頁面來使用Cluster Web Console監視聯邦叢集。叢集中的任何Namenode都可用於訪問此網頁。

叢集Web控制檯提供以下資訊:

  • 一個叢集摘要,顯示了整個叢集的檔案數量,塊數,總配置儲存容量以及可用/已用儲存。

  • 一個Namenodes的列表和一個摘要,包含了每個Namenode的檔案數,塊數,缺失塊數,以及存活和掛掉的資料節點數。它還提供訪問每個Namenode的Web UI的連結。

  • Datanodes的退役狀態。