HDFS Federation(HDFS 聯邦)(Hadoop2.3)

Thinkgamer_gyt發表於2015-11-26

最早接觸Federation這個詞還是第一家公司用的DB2聯邦資料庫。

第一代Hadoop HDFS:


 

結構上由一個namenode和眾多datanode組成。

功能上劃分為namespace和block storage service 兩部分。

 

所謂的HDFS Federation就是有多個namenode(或者說namespace)。

如圖:


 

這裡有block pool的概念,每一個namespace都有一個pool,datanodes會儲存叢集中所有的pool,block pool之間的管理是獨立的,一個namespace生成一個block id時不需要跟其它namespace協調,一個namenode的失敗也不會影響到datanode對其它namenodes的服務。

一個namespace和它的blockpool作為一個管理單元,刪除後,對應於datanodes中的pool也會被刪除。叢集升級時,這個管理單元也獨立升級。

這裡引入clusterID來標示叢集所有節點。當一個namenode format之後,這個id生成,叢集中其它namenode的format也用這個id。

多namenode的好處:

1、namespace可擴充套件性。原來只有hdfs儲存可以水平擴充套件,現在namenode也可以做到了,減輕單namenode的記憶體和服務壓力。

2、效能方面。多個namenode可以提高讀寫時的吞吐量。

3、隔離性。隔離不同型別的程式,一定程度上控制資源的分配。

聯邦的配置:

聯邦的配置是向後相容的,允許在不改變任何配置的情況下讓當前執行的單節點環境轉換成聯邦環境。新的配置方案確保了在叢集環境中的所有節點的配置檔案都是相同的。

這裡引入了NameServiceID概念,作為namenodes們的字尾。

第一步:配置屬性dfs.nameservices,用於datanodes們識別namenodes。

第二步:為每個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.secondaryhttp-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.secondaryhttp-address.ns2</name>
    <value>snn-host2:http-port</value>
  </property>

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

 

 

管理叢集:

啟動和停止用start-dfs.sh和stop-dfs.sh

跟第一代hadoop不同的是:這裡允許叢集中任何一臺有效節點執行這兩個命令,根據配置啟動namenode和datanode,而第一代hadoop則是以執行啟動指令碼的節點為單一namenode。

均衡器:

由於多namenode了,均衡器也做了改變,執行命令:

 

"$HADOOP_PREFIX"/bin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script "$bin"/hdfs start balancer [-policy <policy>]

策略可以是node,之前也有的,增加了block pool,既在datanode級別又在block pool級別均衡。

下線節點:

跟之前版本的類似,把需要下線的節點新增到每臺namenode的exclude檔案中。

第一步:

"$HADOOP_PREFIX"/bin/distributed-exclude.sh <exclude_file>
第二步:
"$HADOOP_PREFIX"/bin/refresh-namenodes.sh
 
叢集控制檯:
 
http://<any_nn_host:port>/dfsclusterhealth.jsp

相關文章