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、通過網頁驗證是否搭建成功