繼上次安裝完Kerberos安全認證后,現在我在這基礎上,又給CDH加上了HA(high availability),也就是高可靠性,具體來講就是雙NameNode,雙Jobtracker(我還是在MRv1模式下),有了HA后,這下集群的健壯性就能夠得到很好的保證了。 我還是按照官方文檔來操作
繼上次安裝完Kerberos安全認證后,現在我在這基礎上,又給CDH加上了HA(high availability),也就是高可靠性,具體來講就是雙NameNode,雙Jobtracker(我還是在MRv1模式下),有了HA后,這下集群的健壯性就能夠得到很好的保證了。
我還是按照官方文檔來操作的,有了上次的經驗,建議大家在具體操作實施前,先快速閱讀一遍,做到心中有數,我還閱讀了Apache官方的說明,也不用怎么詳細,大概知道怎么回事就行了。
首先說明一點的就是,CDH5 只支持Quorum Journal Manager(QJM)模式下的HA,不支持NFS模式的,這點和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)
這個是正常的,等3臺全部啟動后,有如下日志就證明沒問題了
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
與這個類似的信息,但是在執行zkfc -formatZK時,老是說的我得到的字符串(’->’ 后面的那部分)不對,我也不知道為什么,不知道是不是哪步少了什么,因為zookeeper集群在內網,集群內安全性一般不用考慮,我這里就直接忽略了這步,以后機會再找原因。
在配置Fencing Configuration時,我用了sshfence的方式,這里需要配置ssh的密鑰,我直接把hdfs用戶的密鑰路徑給上,后來在我驗證雙Namenode是否生效(通過kill掉active的NN,看看standby的NN能不能變為active的NN)發現不對,老是報錯,連接不上另一個Namenode,后來發現需要用root的密鑰,但是hdfs用戶又不能讀取root的密鑰,所以我這里直接把root的.ssh文件下的文件全copy到hdfs用戶的$HOME下,并設置為hdfs為其owner(我的root用戶在集群內也是可以免密碼登錄的),這樣就沒問題了。
需要說明的是,在開啟namenode之前,必須先開啟journalnode,因為namenode開啟時會去連接journalnode
然后就是開啟雙Namenode的步驟了,下面記錄一些需要用到的命令
sudo -u hdfs bin/hdfs zkfc -formatZKsudo -u hdfs sbin/hadoop-daemon.sh start journalnode #開啟journalnode進程sudo -u hdfs sbin/hadoop-daemon.sh start zkfc #開啟automatic failover進程sudo -u hdfs bin/hdfs namenode -initializeSharedEdits #把一個non-HA的NameNode轉為HA時用到sudo -u hdfs bin/hdfs namenode -bootstrapStandby sudo -u hdfs sbin/hadoop-daemon.sh start namenode#上面命這兩個命令在運行第二個Namenode服務器上執行,必須先執行-bootstrapStandby 這行命令再開啟namenode #下面這些命令之前,需要以hdfs用戶用kinit拿到TGT,否則會報錯sudo -u hdfs bin/hdfs haadmin -getServiceState nn1 #查看nn1是active的還是standby的
sudo -u mapred sbin/hadoop-daemon.sh start jobtrackerha
命令開啟jobtrackerha
#運行下面這些命令之前,要先以mapred用戶用kinit拿到TGT,否則會報錯sudo -u mapred bin/hadoop mrhaadmin -getServiceState jt1
查看jt1是active的還是standby的
最后一個,還是關于HDFS的權限問題,因為mapreduce在執行任務時會向HDFS上寫一些臨時文件,如果權限不對,肯定就會報錯了,不過這種錯誤也很好該,根據錯誤信息就能知道那個目錄權限不對,然后改過來就行了,我這里進行下總結:
根據官方的教程配置教程,配置了如下選項:
mapred.job.tracker.persist.jobstatus.dir /jobtracker/jobsInfo
所以需要在HDFS上創建相應目錄,并修改其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指定的文件,默認為${hadoop.tmp.dir}/mapred/system,所以還需要執行下面的命令:
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
這個目錄只由mapred用戶來寫入,所以不用再修改其權限(的755即可)。
總結:這次配置HA的整個過程還是比較順利的,除了煩人的各種權限問題,我覺得這也是我沒有弄明白hadoop各個進程是如何工作導致的,通過支持配置HA,算是對job的運行又有了更深的的認識。
繼上次安裝完Kerberos安全認證后,現在我在這基礎上,又給CDH加上了HA(high availability),也就是高可靠性,具體來講就是雙NameNode,雙Jobtracker(我還是在MRv1模式下),有了HA后,這下集群的健壯性就能夠得到很好的保證了。
我還是按照官方文檔來操作的,有了上次的經驗,建議大家在具體操作實施前,先快速閱讀一遍,做到心中有數,我還閱讀了Apache官方的說明,也不用怎么詳細,大概知道怎么回事就行了。
原文地址:hadoop1.0 高可靠性(HA)安裝與總結, 感謝原作者分享。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com