日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Setting Up Hadoop NameNode High Availability

發(fā)布時(shí)間:2025/6/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Setting Up Hadoop NameNode High Availability 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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)容

<!--修改HDFS的Nameservice為NNcluster--><property><name>fs.defaultFS</name><value>hdfs://NNcluster</value></property> <!--指定Zookeeper地址--><property> <name>ha.zookeeper.quorum</name> <value>hdp01:2181,hdp02:2181,hdp03:2181,hdp04:2181</value> </property>

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):

[hadoop@hdp01 hadoop]$ for i in {1..4};do ssh hdp0$i 'source .bash_profile;hadoop-daemon.sh start journalnode';done starting journalnode, logging to /u01/hadoop/logs/hadoop-hadoop-journalnode-hdp01.out starting journalnode, logging to /u01/hadoop/logs/hadoop-hadoop-journalnode-hdp02.out starting journalnode, logging to /u01/hadoop/logs/hadoop-hadoop-journalnode-hdp03.out starting journalnode, logging to /u01/hadoop/logs/hadoop-hadoop-journalnode-hdp04.out

2.2 初始化JournalNodes
分別在各個(gè)節(jié)點(diǎn)執(zhí)行以下命令:

[hadoop@hdp01 hadoop]$ for i in {1..4};do ssh hdp$i 'source .bash_profile;hdfs namenode -initializeSharedEdits -force';done

如果不想在交互模式下執(zhí)行上述命令,就加-force和-nonInteractive參數(shù)即可。
2.3 初始化ZooKeeper中的HA狀態(tài)
這步只需在Master節(jié)點(diǎn)執(zhí)行即可,如下:

[hadoop@hdp01 hadoop]$ hdfs zkfc -formatZK -force

啟動(dòng)zkfc服務(wù):

[hadoop@hdp01 hadoop]$ hadoop-daemons.sh start zkfc

Standby節(jié)點(diǎn)啟動(dòng)namenode服務(wù):

[hadoop@hdp02 ~]$ hdfs namenode -bootstrapStandby -force

2.4 重啟hadoop集群(可選項(xiàng))

[hadoop@hdp01 ~]$ stop-yarn.sh;stop-dfs.sh [hadoop@hdp01 ~]$ start-dfs.sh;start-yarn.sh

2.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)切換,如下:

[hadoop@hdp01 ~]$ hadoop-daemon.sh stop namenode stopping namenode [hadoop@hdp01 ~]$ hdfs haadmin -getServiceState nn1 18/01/03 11:30:36 INFO ipc.Client: Retrying connect to server: hdp01/192.168.120.96:8020. Already tried 0 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=1, sleepTime=1000 MILLISECONDS) Operation failed: Call From hdp01/192.168.120.96 to hdp01:8020 failed on connection exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused [hadoop@hdp01 ~]$ hdfs dfs -ls / Found 6 items drwxr-xr-x - hadoop supergroup 0 2017-12-27 10:27 /hbase drwxrwxrwt - hadoop hadoop 0 2017-12-21 15:04 /logs drwxrwx--- - hadoop supergroup 0 2017-12-21 15:03 /mr-history drwxr-xr-x - hadoop supergroup 0 2017-12-11 19:56 /spark drwxrwxrwx - hadoop supergroup 0 2017-12-26 11:41 /tmp drwxr-xr-x - hadoop supergroup 0 2017-12-26 11:05 /user

經(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,如下:

--修改前:<property><name>hbase.rootdir</name><value>hdfs://hdp01:9000/hbase</value></property> --修改后:<property><name>hbase.rootdir</name><value>hdfs://NNcluster/hbase</value></property>

鏈接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 load

4.2 Hive設(shè)置
編輯hive-site.xml文件,修改如下內(nèi)容:

--變更前<property><name>hive.metastore.warehouse.dir</name><value>hdfs://hdp01:9000/user/hive/warehouse</value><description>location of default database for the warehouse</description></property> --變更后<property><name>hive.metastore.warehouse.dir</name><value>hdfs://NNcluster/user/hive/warehouse</value><description>location of default database for the warehouse</description></property>

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。