繼上次安裝完Kerberos安全認(rèn)證后,現(xiàn)在我在這基礎(chǔ)上,又給CDH加上了HA(high availability),也就是高可靠性,具體來講就是雙NameNode,雙Jobtracker(我還是在MRv1模式下),有了HA后,這下集群的健壯性就能夠得到很好的保證了。 我還是按照官方文檔來操作
繼上次安裝完Kerberos安全認(rèn)證后,現(xiàn)在我在這基礎(chǔ)上,又給CDH加上了HA(high availability),也就是高可靠性,具體來講就是雙NameNode,雙Jobtracker(我還是在MRv1模式下),有了HA后,這下集群的健壯性就能夠得到很好的保證了。
我還是按照官方文檔來操作的,有了上次的經(jīng)驗(yàn),建議大家在具體操作實(shí)施前,先快速閱讀一遍,做到心中有數(shù),我還閱讀了Apache官方的說明,也不用怎么詳細(xì),大概知道怎么回事就行了。
首先說明一點(diǎn)的就是,CDH5 只支持Quorum Journal Manager(QJM)模式下的HA,不支持NFS模式的,這點(diǎn)和Apache官方的不一樣,大家要留意下。
下面說說我遇到的坑:
2014-07-17 14:49:06,151 [myid:1] - INFO [WorkerReceiver[myid=1]:FastLeaderElection@542] - Notification: 1 (n.leader), 0x100000106 (n.zxid), 0x1 (n.round), LOOKING (n.state), 1 (n.sid), 0x2 (n.peerEPoch), LOOKING (my state)2014-07-17 14:49:06,153 [myid:1] - WARN [WorkerSender[myid=1]:QuorumCnxManager@368] - Cannot open channel to 2 at election address node1/10.4.13.63:3888java.net.ConnectException: Connection refused at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:579) at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:354) at org.apache.zookeeper.server.quorum.QuorumCnxManager.toSend(QuorumCnxManager.java:327) at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.process(FastLeaderElection.java:393) at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.run(FastLeaderElection.java:365) at java.lang.Thread.run(Thread.java:745)
這個(gè)是正常的,等3臺全部啟動(dòng)后,有如下日志就證明沒問題了
2014-07-17 11:26:44,425 [myid:3] - INFO [WorkerReceiver[myid=3]:FastLeaderElection@542] - Notification: 3 (n.leader), 0x0 (n.zxid), 0x1 (n.round), LOOKING (n.state), 3 (n.sid), 0x0 (n.peerEPoch), LOOKING (my state)2014-07-17 11:26:44,426 [myid:3] - INFO [WorkerReceiver[myid=3]:FastLeaderElection@542] - Notification: 2 (n.leader), 0x0 (n.zxid), 0x1 (n.round), LOOKING (n.state), 1 (n.sid), 0x0 (n.peerEPoch), LOOKING (my state)
digest:hdfs-zkfcs:vlUvLnd8MlacsE80rDuu6ONESbM=:rwcda
與這個(gè)類似的信息,但是在執(zhí)行zkfc -formatZK時(shí),老是說的我得到的字符串(’->’ 后面的那部分)不對,我也不知道為什么,不知道是不是哪步少了什么,因?yàn)閦ookeeper集群在內(nèi)網(wǎng),集群內(nèi)安全性一般不用考慮,我這里就直接忽略了這步,以后機(jī)會再找原因。
在配置Fencing Configuration時(shí),我用了sshfence的方式,這里需要配置ssh的密鑰,我直接把hdfs用戶的密鑰路徑給上,后來在我驗(yàn)證雙Namenode是否生效(通過kill掉active的NN,看看standby的NN能不能變?yōu)閍ctive的NN)發(fā)現(xiàn)不對,老是報(bào)錯(cuò),連接不上另一個(gè)Namenode,后來發(fā)現(xiàn)需要用root的密鑰,但是hdfs用戶又不能讀取root的密鑰,所以我這里直接把root的.ssh文件下的文件全copy到hdfs用戶的$HOME下,并設(shè)置為hdfs為其owner(我的root用戶在集群內(nèi)也是可以免密碼登錄的),這樣就沒問題了。
需要說明的是,在開啟namenode之前,必須先開啟journalnode,因?yàn)閚amenode開啟時(shí)會去連接journalnode
然后就是開啟雙Namenode的步驟了,下面記錄一些需要用到的命令
sudo -u hdfs bin/hdfs zkfc -formatZKsudo -u hdfs sbin/hadoop-daemon.sh start journalnode #開啟journalnode進(jìn)程sudo -u hdfs sbin/hadoop-daemon.sh start zkfc #開啟automatic failover進(jìn)程sudo -u hdfs bin/hdfs namenode -initializeSharedEdits #把一個(gè)non-HA的NameNode轉(zhuǎn)為HA時(shí)用到sudo -u hdfs bin/hdfs namenode -bootstrapStandby sudo -u hdfs sbin/hadoop-daemon.sh start namenode#上面命這兩個(gè)命令在運(yùn)行第二個(gè)Namenode服務(wù)器上執(zhí)行,必須先執(zhí)行-bootstrapStandby 這行命令再開啟namenode #下面這些命令之前,需要以hdfs用戶用kinit拿到TGT,否則會報(bào)錯(cuò)sudo -u hdfs bin/hdfs haadmin -getServiceState nn1 #查看nn1是active的還是standby的
sudo -u mapred sbin/hadoop-daemon.sh start jobtrackerha
命令開啟jobtrackerha
#運(yùn)行下面這些命令之前,要先以mapred用戶用kinit拿到TGT,否則會報(bào)錯(cuò)sudo -u mapred bin/hadoop mrhaadmin -getServiceState jt1
查看jt1是active的還是standby的
最后一個(gè),還是關(guān)于HDFS的權(quán)限問題,因?yàn)閙apreduce在執(zhí)行任務(wù)時(shí)會向HDFS上寫一些臨時(shí)文件,如果權(quán)限不對,肯定就會報(bào)錯(cuò)了,不過這種錯(cuò)誤也很好該,根據(jù)錯(cuò)誤信息就能知道那個(gè)目錄權(quán)限不對,然后改過來就行了,我這里進(jìn)行下總結(jié):
根據(jù)官方的教程配置教程,配置了如下選項(xiàng):
mapred.job.tracker.persist.jobstatus.dir /jobtracker/jobsInfo
所以需要在HDFS上創(chuàng)建相應(yīng)目錄,并修改其owner為mapred
sudo -u hdfs bin/hdfs dfs -mkdir -p /tmp/hadoop-mapred/mapred/stagingsudo -u hdfs bin/hdfs dfs -chown mapred /tmp/hadoop-mapred/mapred/stagingsudo -u hdfs bin/hdfs dfs -chmod 1777 /tmp/hadoop-mapred/mapred/staging
此外,還需要配置mapreduce.jobtracker.system.dir指定的文件,默認(rèn)為${hadoop.tmp.dir}/mapred/system,所以還需要執(zhí)行下面的命令:
sudo -u hdfs bin/hdfs dfs -mkdir -p /tmp/hadoop-mapred/mapred/systemsudo -u hdfs bin/hdfs dfs -chown mapred /tmp/hadoop-mapred/mapred/system
這個(gè)目錄只由mapred用戶來寫入,所以不用再修改其權(quán)限(的755即可)。
總結(jié):這次配置HA的整個(gè)過程還是比較順利的,除了煩人的各種權(quán)限問題,我覺得這也是我沒有弄明白hadoop各個(gè)進(jìn)程是如何工作導(dǎo)致的,通過支持配置HA,算是對job的運(yùn)行又有了更深的的認(rèn)識。
繼上次安裝完Kerberos安全認(rèn)證后,現(xiàn)在我在這基礎(chǔ)上,又給CDH加上了HA(high availability),也就是高可靠性,具體來講就是雙NameNode,雙Jobtracker(我還是在MRv1模式下),有了HA后,這下集群的健壯性就能夠得到很好的保證了。
我還是按照官方文檔來操作的,有了上次的經(jīng)驗(yàn),建議大家在具體操作實(shí)施前,先快速閱讀一遍,做到心中有數(shù),我還閱讀了Apache官方的說明,也不用怎么詳細(xì),大概知道怎么回事就行了。
原文地址:hadoop1.0 高可靠性(HA)安裝與總結(jié), 感謝原作者分享。
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com