1. 程式人生 > >HDFS(NameNode)聯盟的搭建及原理的淺析

HDFS(NameNode)聯盟的搭建及原理的淺析

一、搭建HDFS聯盟

1、為什麼引入HDFS(NameNode)聯盟?

引入Federation的最主要原因是簡單,其簡單性是與真正的分散式Namenode相比而言的。Federation能夠快速的解決了大部分單Namenode HDFS的問題。

Federation是簡單魯棒的設計,由於聯盟中各個Namenode之間是相互獨立的。Federation整個核心設計實現大概用了3.5個月。大部分改變是在Datanode、Config和Tools,而Namenode本身的改動非常少,這樣Namenode原先的魯棒性不會受到影響。比分散式的Namenode簡單,雖然這種實現的擴充套件性比起真正的分散式的Namenode要小些,但是可以迅速滿足需求。另外一個原因是Federation良好的向後相容性,已有的單Namenode的部署配置不需要任何改變就可以繼續工作。

 

2、什麼是HDFS聯盟

HDFS Federation使用了多個獨立的Namenode/namespace來使得HDFS的命名服務能夠水平擴充套件。在HDFS Federation中的Namenode之間是聯盟關係,他們之間相互獨立且不需要相互協調。HDFS Federation中的Namenode提供了提供了名稱空間和塊管理功能。HDFS Federation中的datanode被所有的Namenode用作公共儲存塊的地方。每一個datanode都會向所在叢集中所有的Namenode註冊,並且會週期性的傳送心跳和塊資訊報告,同時處理來自Namenode的指令。

 

作用:(1)實現Load Balance:根據路由規則

           (2)快取更多的元資訊(預設情況是儲存1000M,可以修改配置檔案增加),引入聯盟可以儲存無窮大的元資訊。

 

  

3、搭建HDFS的聯盟

(*)規劃

      NameNode: bigdata12   bigdata13

  DataNode:   bigdata14   bigdata15

  

(*)準備工作:清除之前的環境

(*)在bigdata12上進行配置

     hadoop-env.sh JAVA_HOME /root/training/jdk1.8.0_144

 core-site.xml

<property>

  <name>hadoop.tmp.dir</name>

  <value>/root/training/hadoop-2.7.3/tmp</value>

</property>

 

mapred-site.xml

<property>

  <name>mapreduce.framework.name</name>

  <value>yarn</value>

</property>

 

yarn-site.xml

<property>

  <name>yarn.resourcemanager.hostname</name>

  <value>bigdata12</value>

</property>

 

<property>

  <name>yarn.nodemanager.aux-services</name>

  <value>mapreduce_shuffle</value>

</property>

 

slaves

bigdata14

bigdata15

 

hdfs-site.xml

<property>

  <name>dfs.nameservices</name>

  <value>ns1,ns2</value>

</property>

 

<property>

  <name>dfs.namenode.rpc-address.ns1</name>

  <value>192.168.100.12:9000</value>

</property>

 

<property>

  <name>dfs.namenode.http-address.ns1</name>

  <value>192.168.100.12:50070</value>

</property>

 

<property>

  <name>dfs.namenode.secondaryhttp-address.ns1</name>

  <value>192.168.100.12:50090</value>

</property>

 

<property>

  <name>dfs.namenode.rpc-address.ns2</name>

  <value>192.168.100.13:9000</value>

</property>

 

<property>

  <name>dfs.namenode.http-address.ns2</name>

  <value>192.168.100.13:50070</value>

</property>

 

<property>

  <name>dfs.namenode.secondaryhttp-address.ns2</name>

  <value>192.168.100.13:50090</value>

</property>

 

<property>

  <name>dfs.replication</name>

  <value>2</value>

</property>

 

<property>

  <name>dfs.permissions</name>

  <value>false</value>

</property>

 

增加路由規則-----> core-site.xml中

<property>

<name>fs.viewfs.mounttable.abc.homedir</name>

<value>/home</value>

</property>

 

<property>

<name>fs.viewfs.mounttable.abc.link./hahaha</name>

<value>hdfs://192.168.100.12:9000/hahaha</value>

</property>

 

<property>

<name>fs.viewfs.mounttable.abc.link./logs</name>

<value>hdfs://192.168.100.13:9000/logs</value>

</property>

 

<property>

<name>fs.default.name</name>

<value>viewfs://abc</value>

</property>

 

注意:如果路由規則太多了,不方便維護 ----> 單獨建立一個xml檔案(mountTable.xml)

 參考官方的文件:http://hadoop.apache.org/docs/r2.7.6/hadoop-project-dist/hadoop-hdfs/Federation.html

                 http://hadoop.apache.org/docs/r2.7.6/hadoop-project-dist/hadoop-hdfs/ViewFs.html

 

複製到其他節點

  scp -r /root/training/hadoop-2.7.3/ [email protected]:/root/training

  scp -r /root/training/hadoop-2.7.3/ [email protected]:/root/training

  scp -r /root/training/hadoop-2.7.3/ [email protected]:/root/training

  

對每個NameNode(bigdata12  bigdata13)進行格式化

     注意ID號

     hdfs namenode -format -clusterId abc

 

在啟動Hadoop之前,應該在對應的NameNode上,建立好目錄。

hadoop fs -mkdir hdfs://192.168.100.12:9000/hahaha

hadoop fs -mkdir hdfs://192.168.100.13:9000/logs

 

一定要注意

[[email protected] training]# hdfs dfs -ls /  檢視到的是路由規則,不是目錄

4、通過網頁驗證是否搭建成功