一:注意事項(xiàng)和準(zhǔn)備工作
? 1.1 ?準(zhǔn)備3臺(tái)Linux,可以u(píng)buntu或者centOS ,本機(jī)設(shè)備性能不高须误,建議用設(shè)置開機(jī)進(jìn)入命令行,然后用遠(yuǎn)程操作
? 1.2 ?a .linux 必須關(guān)掉防火墻 ?b.設(shè)置ip和主機(jī)名并且配置ip和主機(jī)映射關(guān)系(不懂百度一下)
? ? ? ? ?b.用root用戶進(jìn)行操作秘狞,后面可以遇到最大limit文件數(shù)的問題,root可以直接操作,比較方便贮乳!
?1.3 群集規(guī)劃
二:操作步驟
?2.1 安裝jdk并設(shè)置環(huán)境變量(不懂可以看上一篇Hadoop偽分布搭建)
?2.2?配置免密碼登陸
? ?a.?#首先要配置sunshine02到sunshine02、sunshine03、sunshine04的免密碼
? ?b.?#在sunshine02上生產(chǎn)一對(duì)鑰匙?
? ? ? ? ? ? ? ? ? ssh-keygen -t rsa
? ?c .#將公鑰拷貝到其他節(jié)點(diǎn)搁凸,包括自己
? ? ? ? ? ? ? ? ? ssh-copy-id sunshine02
? ? ? ? ? ? ? ? ? ssh-copy-id sunshine03
? ? ? ? ? ? ? ? ? ssh-copy-id sunshine04
? d.?sunshine03到sunshine02葱轩、sunshine03睦焕、sunshine04的免密碼同上操作
? e.?sunshine04到sunshine02、sunshine03靴拱、sunshine04的免密碼同上操作
? f. 注意:兩個(gè)namenode之間要配置ssh免密碼登陸
?2.3?安裝配置zooekeeper集群(在sunshine02上)
? a.?解壓tar -zxvf zookeeper-3.4.5.tar.gz -C /home/linwentao/desktop/app ? (后面自己路徑可以自己定義)
? b.?修改配置
? ? ? ? ? ? cd /home/linwentao/desktop/app/zookeeper-3.4.5/conf/
? ? ? ? ? ? cp zoo_sample.cfg zoo.cfg
? ? ? ? ? ? vim zoo.cfg ?修改:dataDir=/home/linwentao/desktop/app/zookeeper-3.4.5/tmp
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? dataLogDir=/home/zookeeper/logs
? ? ? ? ? ? 在最后添加:
? ? ? ? ? ?server.1=sunshine02:2888:3888
? ? ? ? ? ?server.2=sunshine03:2888:3888
? ? ? ? ? ?server.3=sunshine04:2888:3888
? ? ? ? ? 保存退出
? ? ? ? ?創(chuàng)建一個(gè)tmp和logs文件夾
? ? ? ? ? mkdir /home/linwentao/desktop/app/zookeeper-3.4.5/tmp
? ? ? ? ? mkdir /home/linwentao/desktop/app/zookeeper-3.4.5/logs
? ? ? ? ? ?創(chuàng)建一個(gè)空文件
? ? ? ? ? ?touch /home/linwentao/desktop/app/zookeeper-3.4.5/tmp/myid
? ? ? ? ? ?向該文件寫入ID?
? ? ? ? ? ? echo 1 > /home/linwentao/desktop/app/zookeeper-3.4.5/tmp/myid
?c.?將配置好的zookeeper拷貝到其他節(jié)點(diǎn)(sunshine03,sunshine04)
? ? scp -r /home/linwentao/desktop/app/zookeeper-3.4.5/ ?sunshine03:/home/linwentao/desktop/app/
? ? scp -r /home/linwentao/desktop/app/zookeeper-3.4.5/ ?sunshine04:/home/linwentao/desktop/app/
? ? 注意:必須修改sunshine03垃喊、sunshine04 里面的myid的值(對(duì)應(yīng)值為前面配置zoo.cfg最后server后面的數(shù)值)
? ? sunshine03-----2 ? ? ? ?sunshine04----3
2.4 安裝hadoop群集
? a. 先對(duì)一臺(tái)進(jìn)行安裝,然后進(jìn)行復(fù)制或傳輸即可
? b .修改core-site.xml
? ?<configuration>
? ? ? ? ?<!-- 指定hdfs的nameservice 為ns1--->
? ? ? ? ? <property>
? ? ? ? ? ? ? ? ? ? ? ? ? <name>fs.defaultFS</name>
? ? ? ? ? ? ? ? ? ? ? ? ? <value>hdfs//ns1</value>
? ? ? ? ? ?</property>
? ? ? ? ? <!-- 指定hadoop臨時(shí)目錄 -->
? ? ? ? ? ? <property>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <name>hadoop.tmp.dir</name>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <value>/home/linwentao/desktop/app/hadoop-2.4.1/tmp</value>
? ? ? ? ? ? </property>
? ? ? ? ? ? <!-- 指定zookeeper地址 -->
? ? ? ? ? ? ?<property>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <name>ha.zookeeper.quorum</name>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?<value>sunshine02:2181,sunshine03:2181,sunshine04:2181</value>?
? ? ? ? ? ? ? ? </property>
? </configuration>
? ?c. 修改hdfs-site.xml
? ? ? ? ? <configuration>
? ? ? ? ? ? ? ?<!--指定hdfs的nameservice為ns1袜炕,需要和core-site.xml中的保持一致 -->
? ? ? ? ? ? ? ? ? ?<property>
? ? ? ? ? ? ? ? ? ? ? ? ? ? <name>dfs.nameservices</name>
? ? ? ? ? ? ? ? ? ? ? ? ? ? <value>ns1</value>
? ? ? ? ? ? ? ? ? ?</property>
? ? ? ? ? ? ? ? ? ? <!-- ns1下面有兩個(gè)NameNode本谜,分別是nn1,nn2 -->
? ? ? ? ? ? ? ? ? ?<property>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?<name>dfs.ha.namenodes.ns1</name>
? ? ? ? ? ? ? ? ? ? ? ? ? ? <value>nn1,nn2</value>
? ? ? ? ? ? ? ? ? ?</property>
? ? ? ? ? ? ? ? ? <!-- nn1的RPC通信地址 -->
? ? ? ? ? ? ? ? ? <property>
? ? ? ? ? ? ? ? ? ? ? ? ? <name>dfs.namenode.rpc-address.ns1.nn1</name>
? ? ? ? ? ? ? ? ? ? ? ? ? <value>sunshine02:9000</value>
? ? ? ? ? ? ? ? ? </property>
? ? ? ? ? ? ? ? ?<!-- nn1的http通信地址 -->
? ? ? ? ? ? ? ? ?<property>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <name>dfs.namenode.http-address.ns1.nn1</name>
? ? ? ? ? ? ? ? ? ? ? ? ? ? <value>sunshine02:50070</value>
? ? ? ? ? ? ? ? ?</property>
? ? ? ? ? ? ? ? ? <!-- nn2的RPC通信地址 -->
? ? ? ? ? ? ? ? ? <property>
? ? ? ? ? ? ? ? ? ? ? ? ? ?<name>dfs.namenode.rpc-address.ns1.nn2</name>
? ? ? ? ? ? ? ? ? ? ? ? ? <value>sunshine03:9000</value>
? ? ? ? ? ? ? ? ? ? </property>
? ? ? ? ? ? ? ? ?<!-- nn2的http通信地址 -->
? ? ? ? ? ? ? ? <property>
? ? ? ? ? ? ? ? ? ? ? ? ? ?<name>dfs.namenode.http-address.ns1.nn2</name>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?<value>sunshine03:50070</value>
? ? ? ? ? ? ? ? </property>
? ? ? ? ? ? ? <!-- 指定NameNode的元數(shù)據(jù)在JournalNode上的存放位置 -->
? ? ? ? ? ? ? <property>
? ? ? ? ? ? ? ? ? ? ? <name>dfs.namenode.shared.edits.dir</name>
? ? ? ? ? ? ? ? ? ? ?<value>qjournal://sunshine02:8485;sunshine03:8485;sunshine04:8485/ns1</value> ?
? ? ? ? ? ? ? </property>
? ? ? ? ? ? ?<!-- 指定JournalNode在本地磁盤存放數(shù)據(jù)的位置 -->
? ? ? ? ? ? ?<property>
? ? ? ? ? ? ? ? ? ? ? ? <name>dfs.journalnode.edits.dir</name>
? ? ? ? ? ? ? ? ? ? ? ? ?<value>/home/linwentao/desktop/app/hadoop-2.4.1/journaldata</value> ?
? ? ? ? ? ? ?</property>
? ? ? ? ? ? ? <!-- 開啟NameNode失敗自動(dòng)切換 -->
? ? ? ? ? ? ?<property>
? ? ? ? ? ? ? ? ? ? ?<name>dfs.ha.automatic-failover.enabled</name>
? ? ? ? ? ? ? ? ? ? ?<value>true</value>
? ? ? ? ? ? ? </property>
? ? ? ? ? ? ?<!-- 配置失敗自動(dòng)切換實(shí)現(xiàn)方式 -->
? ? ? ? ? ?<property>?
? ? ? ? ? ? ? ? ? <name>dfs.client.failover.proxy.provider.ns1</name>
? ? ? ? ? ? ? ? ? <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> ? ? ? ? ? ? ? ?
? ? ? ? ? </property>
? ? ? ? ? ? ? <!-- 配置隔離機(jī)制方法偎窘,多個(gè)機(jī)制用換行分割乌助,即每個(gè)機(jī)制暫用一行-->
? ? ? ? ? ? ? <property>
? ? ? ? ? ? ? ? ? ? ? ? ?<name>dfs.ha.fencing.methods</name>
? ? ? ? ? ? ? ? ? ? ? ? ? <value>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?sshfence
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?shell(/bin/true)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? </value>
? ? ? ? ? ? ? ? ? ?</property>
? ? ? ? ? ? ? ? ? ? ? < !-- 使用sshfence隔離機(jī)制時(shí)需要ssh免登陸 -->
? ? ? ? ? ? ? ? ? ? <property>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <name>dfs.ha.fencing.ssh.private-key-files</name>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <value>/home/root/.ssh/id_rsa</value>
? ? ? ? ? ? ? ? ? ? </property>
? ? ? ? ? ? ? ? ? ?<!-- 配置sshfence隔離機(jī)制超時(shí)時(shí)間 -->
? ? ? ? ? ? ? ? ? ?<property>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?<name>dfs.ha.fencing.ssh.connect-timeout</name>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <value>30000</value>
? ? ? ? ? ? ? ? ? ? ?</property>
? ? ? ?</configuration>
?d.修改mapred-site.xml
? ? ? ? ? ? ?<configuration>
????????????????????????????<!-- 指定mr框架為yarn方式 -->
????????????????????????????<property>
????????????????????????????????????????<name>mapreduce.framework.name</name>
????????????????????????????????????????<value>yarn</value>
????????????????????????????????</property>
????????????</configuration>
e.修改yarn-site.xml
? ? ? ? ? ? ? ? <configuration>
????????????????????????????????????<!-- 開啟RM高可用 -->
????????????????????????????????????<property>
????????????????????????????????????????????????? <name>yarn.resourcemanager.ha.enabled</name>
????????????????????????????????????????????????? <value>true</value>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?</property>
????????????????????????????????????<!-- 指定RM的cluster id -->
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?<property>
????????????????????????????????????????????????? <name>yarn.resourcemanager.cluster-id</name>
????????????????????????????????????????????????????? <value>yrc</value>
????????????????????????????????????????????</property>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <!-- 指定RM的名字 -->
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <property>
????????????????????????????????????????????????? <name>yarn.resourcemanager.ha.rm-ids</name>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <value>rm1,rm2</value>
????????????????????????????????????????</property>
????????????????????????????????????<!-- 分別指定RM的地址 -->
????????????????????????????????????????<property>
? ????????????????????????????????????????????????<name>yarn.resourcemanager.hostname.rm1</name>
????????????????????????????????????????????????? <value>sunshine02</value>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?</property>
????????????????????????????????????????????<property>
? ????????????????????????????????????????????????????<name>yarn.resourcemanager.hostname.rm2</name>
????????????????????????????????????????????????????? <value>sunshine03</value>
????????????????????????????????????????????</property>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?<!-- 指定zk集群地址 -->
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?<property>
? ????????????????????????????????????????????<name>yarn.resourcemanager.zk-address</name>
? ?????????????????????????????????????????????<value>sunshine02:2181,sunshine03:2181,sunshine04:2181</value>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? </property>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <property>
????????????????????????????????????????????????? <name>yarn.nodemanager.aux-services</name>
????????????????????????????????????????????????? <value>mapreduce_shuffle</value>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?</property>
? ? ? ? ? ? ?</configuration>
? f .修改slaves(slaves是指定子節(jié)點(diǎn)的位置赡磅,因?yàn)橐趕unshine02上啟動(dòng)HDFS数苫、在sunshine03啟動(dòng)yarn,所以sunshine02上的slaves文件指定的是 ? ? ?datanode的位置甩苛,sunshine03上的slaves文件指定的是nodemanager的位置)
? ? ? sunshine02 ? : sunshine02仆葡、sunshine03赏参、sunshine04
? ? ? sunshine03 ? : sunshine02、sunshine03沿盅、sunshine04
三:啟動(dòng)操作(嚴(yán)格按照下面的步驟)
? ?3.1?啟動(dòng)zookeeper集群(分別在sunshine02把篓、sunshine03、sunshine04上啟動(dòng)zk)
? ? ? ? ? ? ?cd /home/linwentao/desktop/app/zookeeper-3.4.5/bin/
? ? ? ? ? ? ?./zkServer.sh start
? ? ? ? ? ?#查看狀態(tài):一個(gè)leader腰涧,兩個(gè)follower
? ? ? ? ? ?./zkServer.sh status
?3.2?啟動(dòng)journalnode(分別在在sunshine02韧掩、sunshine03、sunshine04上執(zhí)行)
? ? ? ? ? ? ? ? ? ?cd /home/linwentao/desktop/app/hadoop-2.4.1
? ? ? ? ? ? ? ? ? sbin/hadoop-daemon.sh start journalnode
? ? ?#運(yùn)行jps命令檢驗(yàn)窖铡,sunshine02揍很、sunshine03、sunshine04上多了JournalNode進(jìn)程
3.3?格式化HDFS
? ? ? #在weekend01上執(zhí)行命令:?hdfs namenode -format
? ? ? #格式化后會(huì)在根據(jù)core-site.xml中的hadoop.tmp.dir配置生成個(gè)文件万伤,這里我配??置的是/home/linwentao/desktop/app/hadoop- ? ? ? ? ? ? ? ? ? ? ? ? 2.4.1/?tmp窒悔,然后將/home/linwentao/desktop/app/hadoop-2.4.1/ tmp拷貝到sunshine03的/weekend/hadoop-2.4.1/下。
? ? ? ? ? ? ? scp -r tmp/ ?sunshine03:/home/linwentao/desktop/app/hadoop-2.4.1/
3.4?格式化ZKFC(在sunshine02上執(zhí)行即可)
? ? ? ? ? ? hdfs zkfc -formatZK
3.5?啟動(dòng)HDFS(在sunshine02上執(zhí)行)
? ? ? ? ? start-dfs.sh
3.6?啟動(dòng)YARN(可以在sunshine02敌买、sunshine03简珠、sunshine04其中一臺(tái)開,建議在sunshine04,?為把namenode和resourcemanager分開是因?yàn)樾阅軉栴}聋庵,因?yàn)樗麄兌家加么罅抠Y源膘融,所以把他們分開了,他們分開了就要分別在不同的機(jī)器上啟動(dòng))
四:驗(yàn)證
?http://192.168.157.140:50070
NameNode 'sunshine02:9000' (active)
http://1192.168.157.141:50070
NameNode 'sunshine03:9000' (standby)
驗(yàn)證HDFS HA
首先向hdfs上傳一個(gè)文件
hadoop fs -put /etc/profile /profile
hadoop fs -ls /
然后再kill掉active的NameNode
kill -9 <pid of NN>
通過瀏覽器訪問:http://192.168.157.141:50070
NameNode 'sunshine03:9000' (active)
這個(gè)時(shí)候weekend02上的NameNode變成了active
在執(zhí)行命令:
hadoop fs -ls /
剛才上傳的文件依然存在<烙瘛Q跤场!
手動(dòng)啟動(dòng)那個(gè)掛掉的NameNode
sbin/hadoop-daemon.sh start namenode
通過瀏覽器訪問:http://192.168.157.140:50070
NameNode 'sunshine02:9000' (standby)
OK脱货,大功告成5憾肌!振峻!
測試集群工作狀態(tài)的一些指令 :
bin/hdfs dfsadmin -report 查看hdfs的各節(jié)點(diǎn)狀態(tài)信息
bin/hdfs haadmin -getServiceState nn1 獲取一個(gè)namenode節(jié)點(diǎn)的HA狀態(tài)
sbin/hadoop-daemon.sh start namenode ?單獨(dú)啟動(dòng)一個(gè)namenode進(jìn)程
./hadoop-daemon.sh start zkfc ? 單獨(dú)啟動(dòng)一個(gè)zkfc進(jìn)程