Setting Up Hadoop NameNode High Availability
Hadoop2.0以后,2個(gè)NameNode的數(shù)據(jù)其實(shí)是實(shí)時(shí)共享的。新HDFS采用了一種共享機(jī)制,Quorum Journal Node(JournalNode)集群或者Nnetwork File System(NFS)進(jìn)行共享。NFS是操作系統(tǒng)層面的,JournalNode是hadoop層面的,本文使用JournalNode集群進(jìn)行數(shù)據(jù)共享(這也是主流的做法)。如下圖所示,便是JournalNode的架構(gòu)圖。
兩個(gè)NameNode為了數(shù)據(jù)同步,會(huì)通過一組稱作JournalNodes的獨(dú)立進(jìn)程進(jìn)行相互通信。當(dāng)active狀態(tài)的NameNode的命名空間有任何修改時(shí),會(huì)告知大部分的JournalNodes進(jìn)程。standby狀態(tài)的NameNode有能力讀取JNs中的變更信息,并且一直監(jiān)控edit log的變化,把變化應(yīng)用于自己的命名空間。standby可以確保在集群出錯(cuò)時(shí),命名空間狀態(tài)已經(jīng)完全同步了。
對(duì)于HA集群而言,確保同一時(shí)刻只有一個(gè)NameNode處于active狀態(tài)是至關(guān)重要的。否則,兩個(gè)NameNode的數(shù)據(jù)狀態(tài)就會(huì)產(chǎn)生分歧,可能丟失數(shù)據(jù),或者產(chǎn)生錯(cuò)誤的結(jié)果。為了保證這點(diǎn),這就需要利用使用ZooKeeper了。首先HDFS集群中的兩個(gè)NameNode都在ZooKeeper中注冊,當(dāng)active狀態(tài)的NameNode出故障時(shí),ZooKeeper能檢測到這種情況,它就會(huì)自動(dòng)把standby狀態(tài)的NameNode切換為active狀態(tài)。
一、NameNode HA搭建
1.1 環(huán)境介紹
本文的環(huán)境如下表所示:
1.2 環(huán)境設(shè)置
針對(duì)hadoop集群環(huán)境需要設(shè)置SSH免密碼登錄以及安裝JDK。在搭建hadoop集群的時(shí)候,已經(jīng)設(shè)置了,這里直接省略.....
1.3 Zookeeper集群搭建
請(qǐng)參考我的博客鏈接:Configuring Zookeeper Cluster
1.4 編輯core-site.xml,追加以下內(nèi)容
1.5 編輯hdfs-site.xml,追加以下內(nèi)容
<!-- Configure NameNode High Availability. --> <!-- 指定nameservices名稱(這個(gè)要和core-site.xml文件中的值相同) --><property><name>dfs.nameservices</name><value>NNcluster</value></property> <!--啟用NameNode故障時(shí)自動(dòng)切換--><property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <!--NNcluster下面有兩個(gè)NameNode,分別是nn1,nn2--><property><name>dfs.ha.namenodes.NNcluster</name><value>nn1,nn2</value></property> <!--nn1對(duì)應(yīng)hdp01--><property> <name>dfs.namenode.rpc-address.ns.nn1</name> <value>hdp01:9000</value> </property> <!--nn2對(duì)應(yīng)hdp02--><property> <name>dfs.namenode.rpc-address.ns.nn2</name> <value>hdp02:9000</value> </property><property><name>dfs.namenode.rpc-address.NNcluster.nn1</name><value>hdp01:8020</value></property><property><name>dfs.namenode.rpc-address.NNcluster.nn2</name><value>hdp02:8020</value></property><property><name>dfs.namenode.http-address.NNcluster.nn1</name><value>hdp01:50070</value></property><property><name>dfs.namenode.http-address.NNcluster.nn2</name><value>hdp02:50070</value></property> <!--指定NameNode的元數(shù)據(jù)在JournalNode上的存放位置,一般JournalNode為奇數(shù)個(gè),這里配置不合理--><property><name>dfs.namenode.shared.edits.dir</name><value>qjournal://hdp01:8485;hdp02:8485;hdp03:8485;hdp04:8485/NNcluster</value></property> <!-- 配置失敗自動(dòng)切換實(shí)現(xiàn)方式 --><property><name>dfs.client.failover.proxy.provider.NNcluster</name><value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value></property> <!-- 配置隔離機(jī)制 --> <property><name>dfs.ha.fencing.methods</name><value>sshfence</value></property> <!-- 使用隔離機(jī)制時(shí)需要ssh免登陸 --><property><name>dfs.ha.fencing.ssh.private-key-files</name><value>/home/hadoop/.ssh/id_rsa</value></property>如果要啟用NameNode的自動(dòng)切換特性,必須配置oozie high availability,只需在oozie-env.sh里定義OOZIE_HTTP_HOSTNAME即可。這個(gè)名稱對(duì)應(yīng)的IP必須是可漂移的IP。
1.6 同步文件?其他節(jié)點(diǎn)
[hadoop@hdp01 hadoop]$ for i in {2..4};do scp hdfs-site.xml* hdp0$i:/u01/hadoop/etc/hadoop;done [hadoop@hdp01 hadoop]$ for i in {2..4};do scp core-site.xml hdp0$i:/u01/hadoop/etc/hadoop;done二、啟動(dòng)服務(wù)
2.1 啟動(dòng)JournalNode服務(wù)
現(xiàn)在主節(jié)點(diǎn)啟動(dòng),然后在其他節(jié)點(diǎn)啟動(dòng):
2.2 初始化JournalNodes
分別在各個(gè)節(jié)點(diǎn)執(zhí)行以下命令:
如果不想在交互模式下執(zhí)行上述命令,就加-force和-nonInteractive參數(shù)即可。
2.3 初始化ZooKeeper中的HA狀態(tài)
這步只需在Master節(jié)點(diǎn)執(zhí)行即可,如下:
啟動(dòng)zkfc服務(wù):
[hadoop@hdp01 hadoop]$ hadoop-daemons.sh start zkfcStandby節(jié)點(diǎn)啟動(dòng)namenode服務(wù):
[hadoop@hdp02 ~]$ hdfs namenode -bootstrapStandby -force2.4 重啟hadoop集群(可選項(xiàng))
[hadoop@hdp01 ~]$ stop-yarn.sh;stop-dfs.sh [hadoop@hdp01 ~]$ start-dfs.sh;start-yarn.sh2.5 節(jié)點(diǎn)狀態(tài)驗(yàn)證
[hadoop@hdp01 ~]$ hdfs haadmin -getServiceState nn1 active [hadoop@hdp01 ~]$ hdfs haadmin -getServiceState nn2 standby三、測試NameNode HA的高可用性
如2.5看到的,nn1狀態(tài)為active,nn2狀態(tài)為standby,停止nn1的namenode服務(wù),看是否可以自動(dòng)切換,如下:
經(jīng)驗(yàn)證可以正常使用。開啟nn1的namenode服務(wù),如下:
[hadoop@hdp01 ~]$ hadoop-daemon.sh start namenode starting namenode, logging to /u01/hadoop/logs/hadoop-hadoop-namenode-hdp01.out [hadoop@hdp01 ~]$ hdfs haadmin -getServiceState nn1 standby四、應(yīng)用配置
4.1 Hbase設(shè)置
修改hbase-site.xml中的hbase.rootdir,如下:
鏈接hadoop的配置文件?hbase的conf目錄下:
--如果HBase HA模式,主備節(jié)點(diǎn)以及regionservers節(jié)點(diǎn)都要做如下鏈接 [hadoop@hdp01 ~]$ ln -s /u01/hadoop/etc/hadoop/hdfs-site.xml /u01/hbase/conf/hdfs-site.xml [hadoop@hdp01 ~]$ ln -s /u01/hadoop/etc/hadoop/core-site.xml /u01/hbase/conf/core-site.xml如果不做上述鏈接,則在啟動(dòng)hbase的過程會(huì)報(bào)錯(cuò)(雖然啟動(dòng)成功,但有些操作不能執(zhí)行),而且regionservers也會(huì)啟動(dòng)失敗。報(bào)錯(cuò)信息如下:
[hadoop@hdp01 conf]$ hbase shell HBase Shell; enter 'help<RETURN>' for list of supported commands. Type "exit<RETURN>" to leave the HBase Shell Version 1.3.1, r930b9a55528fe45d8edce7af42fef2d35e77677a, Thu Apr 6 19:36:54 PDT 2017hbase(main):001:0> statusERROR: org.apache.hadoop.hbase.PleaseHoldException: Master is initializingat org.apache.hadoop.hbase.master.HMaster.checkInitialized(HMaster.java:2452)at org.apache.hadoop.hbase.master.MasterRpcServices.getClusterStatus(MasterRpcServices.java:792)at org.apache.hadoop.hbase.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java:58519)at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2339)at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:123)at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:188)at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:168)正常的執(zhí)行結(jié)果如下:
hbase(main):001:0> status 1 active master, 1 backup masters, 3 servers, 0 dead, 0.6667 average load4.2 Hive設(shè)置
編輯hive-site.xml文件,修改如下內(nèi)容:
Hive的元數(shù)據(jù)庫修改:
主要修改兩張表:DBS和SDS。
其中DBS里定義了數(shù)據(jù)庫的位置信息,如下圖:
而SDS定義了表的位置信息:
如果以上兩張表不做修改,則在對(duì)表進(jìn)行操作的時(shí)候,會(huì)報(bào)如下錯(cuò)誤:
修改后的結(jié)果如下:
查詢驗(yàn)證:
轉(zhuǎn)載于:https://blog.51cto.com/candon123/2057016
總結(jié)
以上是生活随笔為你收集整理的Setting Up Hadoop NameNode High Availability的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LNMP架构介绍
- 下一篇: Refuses to install f