hadoop學(xué)習(xí)(九)Hadoop2.2.0HAzookeeper3.4.5詳細(xì)配置過(guò)程錯(cuò)誤處理(2) Hadoop2.2.0HAzookeeper3.4.5詳細(xì)配置過(guò)程體系結(jié)構(gòu)錯(cuò)誤處理(2) 這篇文章,主要是針對(duì)zookeeper和hadoop集群的整體測(cè)試,以及自己在實(shí)際過(guò)程遇到的問(wèn)題和解決思路。 整個(gè)過(guò)程是,痛苦、無(wú)
hadoop學(xué)習(xí)(九)Hadoop2.2.0+HA+zookeeper3.4.5詳細(xì)配置過(guò)程+錯(cuò)誤處理(2)
Hadoop2.2.0+HA+zookeeper3.4.5詳細(xì)配置過(guò)程+體系結(jié)構(gòu)+錯(cuò)誤處理(2)
這篇文章,主要是針對(duì)zookeeper和hadoop集群的整體測(cè)試,以及自己在實(shí)際過(guò)程遇到的問(wèn)題和解決思路。
整個(gè)過(guò)程是,痛苦、無(wú)奈和糾結(jié)的。伴隨著N多夜晚??偨Y(jié)的過(guò)程就超過(guò)10個(gè)小時(shí)。還有很多問(wèn)題都沒(méi)有寫(xiě)完,后續(xù)會(huì)繼續(xù)跟近,也歡迎與讀者討論交談。
讀者有益,寫(xiě)著有勞。關(guān)愛(ài)身邊每一個(gè)人,熱愛(ài)身體,珍惜生命,且行且珍惜。
http://blog.csdn.net/yczws1/article/details/23594149
按照下面的每一步執(zhí)行,執(zhí)行完一定要看輸出的信息,注意warn或error或fatal的情況。因?yàn)檫@都是可能是問(wèn)題出現(xiàn)的地方。出現(xiàn)一個(gè)問(wèn)題,不解決,可能就會(huì)影響接下來(lái)的測(cè)試。這才是真正的工作量。
在hadoop1、hadoop2、hadoop3、hadoop4、hadoop5上zookeeper目錄下分別執(zhí)行命令:bin/zkServer.sh start
在每一臺(tái)機(jī)器執(zhí)行完上面的命令后,執(zhí)行jps,會(huì)顯示:這是初步認(rèn)定啟動(dòng)沒(méi)有問(wèn)題
23598 Jps 22491 QuorumPeerMain
當(dāng)所有機(jī)器執(zhí)行上述命令完畢后,再在每臺(tái)機(jī)器上執(zhí)行:bin/zkServer.sh status 查看每臺(tái)機(jī)器zookeeper的狀態(tài),正確的話,只有一臺(tái)機(jī)器是leader,其余機(jī)器都是顯示folower。1-5臺(tái)機(jī)器都需要測(cè)試一下,效果如下:
tom@hadoop4:~yarn/hadoop2.2.0/app/zookeeper/bin$ ./zkServer.sh status JMX enabled by default Using config: /home/ericsson/zookeeper/bin/../conf/zoo.cfg Mode: follower tom@hadoop4:~yarn/hadoop2.2.0/app/zookeeper/bin$
在hadoop1機(jī)器上,hadoop目錄,執(zhí)行zkCli.sh 終端上會(huì)輸出一連串的信息。最后結(jié)束的信息是
Welcome to ZooKeeper! 2014-04-08 16:44:40,028 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@966] - Opening socket connection to server localhost/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error) 2014-04-08 16:44:40,033 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@849] - Socket connection established to localhost/127.0.0.1:2181, initiating session JLine support is enabled 2014-04-08 16:44:40,094 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@1207] - Session establishment complete on server localhost/127.0.0.1:2181, sessionid = 0x145407bbc720004, negotiated timeout = 30000 WATCHER:: WatchedEvent state:SyncConnected type:None path:null ls / [zookeeper] [zk: localhost:2181(CONNECTED) 1] [zk: localhost:2181(CONNECTED) 1]
【可以看到ZK集群 中只有一個(gè)節(jié)點(diǎn)zookeeper】
格式化zookeeper集群,目的是在ZooKeeper集群上建立HA的相應(yīng)節(jié)點(diǎn)。
在hadoop1上的hadoop的目錄執(zhí)行:bin/hdfs zkfc –formatZK
正常命令輸出結(jié)尾:
14/04/08 17:03:40 INFO ha.ActiveStandbyElector: Session connected. 14/04/08 17:03:40 INFO zookeeper.ZooKeeper: Session: 0x545407c1d6c0003 closed 14/04/08 17:03:40 INFO zookeeper.ClientCnxn: EventThread shut down
如果終端輸出是以上面結(jié)尾,應(yīng)該是沒(méi)有出現(xiàn)問(wèn)題。
而我在執(zhí)行的時(shí)候,遇到一個(gè)問(wèn)題:在出現(xiàn)上面類(lèi)似代碼之后,報(bào)了一個(gè)異常,導(dǎo)致后面的執(zhí)行沒(méi)有結(jié)果,問(wèn)題就出在這個(gè)異常的之上。
終端輸出:
14/04/08 17:03:40 INFO ha.ActiveStandbyElector: Session connected. 14/04/08 17:03:40 INFO zookeeper.ZooKeeper: Session: 0x545407c1d6c0003 closed 14/04/08 17:03:40 INFO zookeeper.ClientCnxn: EventThread shut down Exception in thread "main" org.apache.hadoop.HadoopIllegalArgumentException: Bad argument: –formatZK at org.apache.hadoop.ha.ZKFailoverController.badArg(ZKFailoverController.java:245) at org.apache.hadoop.ha.ZKFailoverController.doRun(ZKFailoverController.java:208) at org.apache.hadoop.ha.ZKFailoverController.access$000(ZKFailoverController.java:59) at org.apache.hadoop.ha.ZKFailoverController$1.run(ZKFailoverController.java:166) at org.apache.hadoop.ha.ZKFailoverController$1.run(ZKFailoverController.java:162) at org.apache.hadoop.security.SecurityUtil.doAsLoginUserOrFatal(SecurityUtil.java:456) at org.apache.hadoop.ha.ZKFailoverController.run(ZKFailoverController.java:162) at org.apache.hadoop.hdfs.tools.DFSZKFailoverController.main(DFSZKFailoverController.java:175)
就是上面的異常,沒(méi)有解決,導(dǎo)致下面的問(wèn)題都不能進(jìn)行,因?yàn)橄旅嬉趫?zhí)行zkCli.sh,查看zookeeper有沒(méi)有格式化成功,生成集群名稱(chēng)。自己也咨詢了幾個(gè)老師,他們給的回復(fù)也是不知所云。自己在這上面,也是耽誤了很長(zhǎng)時(shí)間,不知道到底問(wèn)題出現(xiàn)在哪兒。其中有一個(gè)回復(fù)是:可能是 -formatZK聲明有問(wèn)題。字面解釋是這樣,但是formatZK的聲明是沒(méi)有問(wèn)題。耽誤了幾天,在網(wǎng)上得到一個(gè)解決方案。Zookeeper日志的問(wèn)題,因?yàn)閦ookeeper是不能自動(dòng)清理日志的。因?yàn)槭孪?,我在裝zookeeper的時(shí)候,裝過(guò)兩次,但是對(duì)應(yīng)的data和log目錄數(shù)據(jù)沒(méi)有更改,導(dǎo)致在執(zhí)行formatZK命令的時(shí)候報(bào)錯(cuò)。
我把log日志刪除掉,重新建立一個(gè)文件,最后問(wèn)題解決。因?yàn)檫@個(gè)原因,自己也查了關(guān)于zookeeper的相關(guān)信息。這里只談到zookeeper日志的問(wèn)題,后續(xù)的話,我們更多的去談zookeeper的相關(guān)內(nèi)容。因?yàn)閦ookeeper的架構(gòu)理念很重要。
在使用zookeeper過(guò)程中,我們知道,會(huì)有data和Log兩個(gè)目錄,分別用于snapshot和事務(wù)日志的輸出(默認(rèn)情況下只有data目錄,snapshot和事務(wù)日志都保存在這個(gè)目錄中,關(guān)于這兩個(gè)目錄的詳細(xì)說(shuō)明,請(qǐng)看《ZooKeeper管理員指南》)。
正常運(yùn)行過(guò)程中,ZK會(huì)不斷地把快照數(shù)據(jù)和事務(wù)日志輸出到這兩個(gè)目錄,并且如果沒(méi)有人為操作的話,ZK自己是不會(huì)清理這些文件的,需要管理員來(lái)清理,這里介紹4種清理日志的方法。在這4種方法中,推薦使用第一種方法,對(duì)于運(yùn)維人員來(lái)說(shuō),將日志清理工作獨(dú)立出來(lái),便于統(tǒng)一管理也更可控。畢竟zk自帶的一些工 具并不怎么給力,這里是社區(qū)反映的兩個(gè)問(wèn)題:這里可以參考:ZooKeepr日志清理 的4種方法:這里不多介紹。
驗(yàn)證:
執(zhí)行:zkCli.sh
輸出和上面執(zhí)行zkCli.sh輸出的內(nèi)容相似。如果輸出下面內(nèi)容,則證明格式化zookeeper成功,否則就出現(xiàn)問(wèn)題:
WATCHER:: WatchedEvent state:SyncConnected type:None path:null ls / [hadoop-ha,zookeeper] [zk: localhost:2181(CONNECTED) 1] ls /hadoop-ha [cluster1] [zk: localhost:2181(CONNECTED) 2]
在hadoop1、hadoop2、hadoop3、hadoop4、hadoop5上分別hadoop目錄
執(zhí)行命令:sbin/hadoop-daemon.sh start journalnode
命令輸出(以hadoop1為例):
[tom@hadoop1 ~yarn/hadoop-2.2.0/]$ sbin/hadoop-daemon.sh start journalnode starting journalnode, logging to yarn/hadoop-2.2.0/logs/hadoop-root-journalnode-hadoop101.out [tom@hadoop1 ~yarn/hadoop-2.2.0/]$
在每個(gè)節(jié)點(diǎn)執(zhí)行完啟動(dòng)命令后,每個(gè)節(jié)點(diǎn)都執(zhí)行以下驗(yàn)證。
驗(yàn)證(以hadoop1為例):
[tom@hadoop1 hadoop]$ jps 23396 JournalNode 23598 Jps 22491 QuorumPeerMain [tom@hadoop1 hadoop]$
查看一下目錄結(jié)構(gòu):
[tom@hadoop1 ~yarn/yarn_data/]$ pwd /home/tom/yarn/yarn_data [tom@hadoop1 ~yarn/yarn_data/]$ ls tmp/ journal [tom@hadoop1 ~yarn/yarn_data/]$
【啟動(dòng)JournalNode后,會(huì)在本地磁盤(pán)產(chǎn)生一個(gè)目錄,用戶保存NameNode的edits文件的數(shù)據(jù)】
從hadoop1和hadoop2中任選一個(gè)即可,這里選擇的是hadoop1
在hadoop1上/home/tom/yarn/hadoop-2.2.0/目錄下執(zhí)行下面命令:
bin/hdfs namenode -format -clusterId c1
命令輸出:
14/04/08 17:39:40 INFO namenode.FSImage: Image file /usr/local/hadoop/tmp/dfs/name/current/fsimage.ckpt_0000000000000000000 of size 196 bytes saved in 0 seconds. 14/04/08 17:39:40 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0 14/04/08 17:39:40 INFO util.ExitUtil: Exiting with status 0 14/04/08 17:39:40 INFO namenode.NameNode: SHUTDOWN_MSG: /************************************************************ SHUTDOWN_MSG: Shutting down NameNode at hadoop1/172.16.128.134 ************************************************************/ [tom@hadoop1 ~yarn/hadoop-2.2.0/]$
驗(yàn)證查看一下目錄結(jié)構(gòu):
[tom@hadoop1 ~yarn/yarn_data]$ pwd /home/tom/yarn/yarn_data [tom@hadoop1 ~yarn/yarn_data]$ ls tmp/ dfs journal [tom@hadoop1 ~yarn/yarn_data]$ls dfs/ name
【格式化NameNode會(huì)在磁盤(pán)產(chǎn)生一個(gè)目錄,用于保存NameNode的fsimage、edits等文件】
出現(xiàn)上面內(nèi)容,則認(rèn)為,格式化namenode成功。
在hadoop1上/home/tom/yarn/hadoop-2.2.0/目錄下執(zhí)行命令:/sbin/hadoop-daemon.sh start namenode
命令輸出:
[tom@hadoop1 ~yarn/hadoop-2.2.0]$ sbin/hadoop-daemon.sh start namenode starting namenode, logging to /home/tom/yarn/hadoop-2.2.0/logs/hadoop-root-namenode-hadoop101.out 驗(yàn)證: [tom@hadoop1 ~yarn/hadoop-2.2.0/]$ jps 23396 JournalNode 23598 Jps 23558 NameNode 22491 QuorumPeerMain [tom@hadoop1 ~yarn/hadoop-2.2.0/]$
在頁(yè)面輸入地址:hadoop1:50070/dfshealth.jsp,你可以在頁(yè)面看到namenode1的狀態(tài),是standby。
在hadoop2上home/tom/yarn/hadoop-2.2.0/目錄上
執(zhí)行命令:
bin/hdfs namenode –bootstrapStandby
命令輸出:
[tom@hadoop2 ~yarn/hadoop-2.2.0]$bin/hdfs namenode -bootstrapStandby 14/04/08 17:49:20 INFO namenode.NameNode: STARTUP_MSG: /************************************************************ ........ 14/04/08 17:49:20 INFO util.ExitUtil: Exiting with status 0 14/04/08 17:49:20 INFO namenode.NameNode: SHUTDOWN_MSG: /************************************************************ SHUTDOWN_MSG: Shutting down NameNode at hadoop2/172.16.128.135 ************************************************************/ [tom@hadoo2 ~yarn/hadoop-2.2.0]$ 驗(yàn)證: [tom@hadoop2 ~yarn/yarn_data]$ pwd /home/tom/yarn/yarn_data [tom@hadoop2 ~yarn/yarn_data]$ ls tmp/ dfs journal [tom@hadoop2 ~yarn/yarn_data]$ls dfs/ name
【在tmp目錄下產(chǎn)生一個(gè)目錄name】
如果出現(xiàn)上面結(jié)果,證明數(shù)據(jù)從namenode1上同步到namenode2上是成功的。如果可以出現(xiàn)上面結(jié)果,繼續(xù)下面的步驟。如果沒(méi)有出現(xiàn)dfs目錄,也同樣執(zhí)行下面的過(guò)程,不過(guò)兩者產(chǎn)生的結(jié)果不一樣。
在hadoop2上/home/tom/yarn/hadoop-2.2.0/目錄下執(zhí)行命令:/sbin/hadoop-daemon.sh start namenode
命令輸出:
[tom@hadoop2 ~yarn/hadoop-2.2.0]$ sbin/hadoop-daemon.sh start namenode starting namenode, logging to /home/tom/yarn/hadoop-2.2.0/logs/hadoop-root-namenode-hadoop101.out 驗(yàn)證: [tom@hadoop2 ~yarn/hadoop-2.2.0/]$ jps 2336 JournalNode 2358 Jps 2358 NameNode 2241 QuorumPeerMain [tom@hadoop2 ~yarn/hadoop-2.2.0/]$
在頁(yè)面地址輸入:hadoop2:50070/dfshealth.jsp你就可以看到namenode2的狀態(tài)效果。和namenode1一樣,同樣是standby狀態(tài)。
不好的事情,我測(cè)試的過(guò)程就沒(méi)有出現(xiàn)上面的結(jié)果,namenode進(jìn)程沒(méi)有啟動(dòng)。這個(gè)問(wèn)題,也是卡在那兒不得已解決,耽誤很長(zhǎng)時(shí)間。問(wèn)題,就出現(xiàn)在6、7兩個(gè)步驟上。不知道怎么解決,后來(lái)咨詢一個(gè)哥們,那哥們把在
http://hadoop.apache.org/docs/r2.3.0/hadoop-yarn/hadoop-yarn-site/HDFSHighAvailabilityWithQJM.html
上給我截了一個(gè)圖,我仔細(xì)看了關(guān)于第6步的過(guò)程。其實(shí)就是為了把namenode1上格式化產(chǎn)生的目錄,拷貝到namenode2中,既然執(zhí)行6沒(méi)有出現(xiàn)我想要的結(jié)果。那就直接把namenode1中目中的dfs目錄直接復(fù)制到namenode2中不就OK了嗎?事實(shí)證明正式如此,官網(wǎng)也是這么說(shuō)明的。復(fù)制完畢,再在namenode2上執(zhí)行第7步,jps就可以看到namenode起來(lái)的進(jìn)程了。至此這個(gè)問(wèn)題解決了。
Datanode是在slaves文件中配置的。在hadoop1上執(zhí)行:
sbin/hadoop-daemons.sh start datanode
命令輸出:
[tom@hadoop2 ~yarn/hadoop-2.2.0]$sbin/hadoop-daemons.sh start datanode hadoop3: starting datanode, logging to /home/tom/yarn/hadoop-2.2.0/logs/hadoop-root-datanode-hadoop3.out hadoop4: starting datanode, logging to /home/tom/yarn/hadoop-2.2.0/logs/hadoop-root-datanode-hadoop4.out hadoop5: starting datanode, logging to /home/tom/yarn/hadoop-2.2.0/logs/hadoop-root-datanode-hadoop5.out hadoop6: starting datanode, logging to /home/tom/yarn/hadoop-2.2.0/logs/hadoop-root-datanode-hadoop6.out [tom@hadoop2 ~yarn/hadoop-2.2.0]$
【上述命令會(huì)在四個(gè)節(jié)點(diǎn)分別啟動(dòng)DataNode進(jìn)程】
驗(yàn)證(以hadoop1為例):
[tom@hadoop2 ~yarn/hadoop-2.2.0]$ jps 23396 JournalNode 24302 Jps 24232 DataNode 23558 NameNode 22491 QuorumPeerMain [tom@hadoop2 ~yarn/hadoop-2.2.0]$
【可以看到j(luò)ava進(jìn)程DataNode】
在hadoop1上執(zhí)行命令:sbin/start-yarn.sh
命令輸出:
[tom@hadoop1 ~yarn/hadoop-2.2.0]$sbin/start-yarn.sh starting yarn daemons starting resourcemanager, logging to /home/tom/yarn/hadoop-2.2.0/logs/yarn-root-resourcemanager-hadoop1.out Hadoop6: starting nodemanager, logging to /home/tom/yarn/hadoop-2.2.0/logs/yarn-root-nodemanager-hadoop6.out hadoop5: starting nodemanager, logging to /home/tom/yarn/hadoop-2.2.0/logs/yarn-root-nodemanager-hadoop5.out hadoop4: starting nodemanager, logging to /home/tom/yarn/hadoop-2.2.0/logs/yarn-root-nodemanager-hadoop4.out hadoop3: starting nodemanager, logging to /home/tom/yarn/hadoop-2.2.0/logs/yarn-root-nodemanager-hadoop3.out hadoop2: starting nodemanager, logging to /home/tom/yarn/hadoop-2.2.0/logs/yarn-root-nodemanager-hadoop2.out hadoop1: starting nodemanager, logging to /home/tom/yarn/hadoop-2.2.0/logs/yarn-root-nodemanager-hadoop1.out [tom@hadoop1 ~yarn/hadoop-2.2.0]$ 驗(yàn)證: [tom@hadoop1 ~yarn/hadoop-2.2.0]$jps 23396 JournalNode 25154 ResourceManager 25247 NodeManager 24232 DataNode 23558 NameNode 22491 QuorumPeerMain 25281 Jps [tom@hadoop1 ~yarn/hadoop-2.2.0]$
【產(chǎn)生java進(jìn)程ResourceManager和NodeManager】
也可以通過(guò)瀏覽器訪問(wèn)hadoop1:8088/cluster
在hadoop1、hadoop2、hadoop3、hadoop4、hadoop5、hadoop6上分別執(zhí)行命令: sbin/hadoop-daemon.sh start zkfc
命令輸出(以hadoop1為例):
[tom@hadoop1 ~yarn/hadoop-2.2.0]$ sbin/hadoop-daemon.sh start zkfc starting zkfc, logging to 、home/tom/yarn/hadoop-2.2.0/logs/hadoop-root-zkfc-hadoop101.out [tom@hadoop1 ~yarn/hadoop-2.2.0]$驗(yàn)證(以hadoop1為例): [tom@hadoop1 ~yarn/hadoop-2.2.0]$ jps 24599 DFSZKFailoverController 23396 JournalNode 24232 DataNode 23558 NameNode 22491 QuorumPeerMain 24654 Jps [tom@hadoop1 ~yarn/hadoop-2.2.0]$
【產(chǎn)生java進(jìn)程DFSZKFailoverController】
在執(zhí)行完第10步的時(shí)候,在頁(yè)面可以觀察到兩個(gè)NameNode的狀態(tài),hadoop1的狀態(tài)是standby,hadoop102的狀態(tài)是active。原先兩個(gè)namenode都是standby的狀態(tài)。
在hadoop1上我們執(zhí)行:kill -9 23558
23558 NameNode
然后jps:nemenode進(jìn)程不存在了
[tom@hadoop1 ~yarn/hadoop-2.2.0]$ jps 24599 DFSZKFailoverController 23396 JournalNode 24232 DataNode 22491 QuorumPeerMain 24654 Jps
然后刷新兩個(gè)頁(yè)面,可以看到,兩臺(tái)機(jī)器的狀態(tài)置換了。原先的active變成standby,原先的standby變成active,這說(shuō)明,HA故障自動(dòng)轉(zhuǎn)換是正常的,HDFS是高可用的。
等你順利結(jié)束上面所有的步驟,都很順利的話,說(shuō)明,你集群搭建基本完成任務(wù)。說(shuō)是基本,因?yàn)檫€有事情要做,就是,你要開(kāi)始上傳文件開(kāi)始測(cè)試程序,看看hadoop是否應(yīng)用正常。這就是接下來(lái)要做的事情了。
整個(gè)過(guò)程是,痛苦、無(wú)奈和糾結(jié)的。伴隨著N多夜晚。總結(jié)的過(guò)程就超過(guò)10個(gè)小時(shí)。還有很多問(wèn)題都沒(méi)有寫(xiě)完,后續(xù)會(huì)繼續(xù)跟近,也歡迎與讀者討論交談。
讀者有益,寫(xiě)著有勞。關(guān)愛(ài)身邊每一個(gè)人,熱愛(ài)身體,珍惜生命,且行且珍惜。
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com