在hadoop2.x中通常由兩個NameNode組成,一個處于active狀態(tài),另一個處于standby狀態(tài)。Active NameNode對外提供服務(wù),而Standby NameNode則不對外提供服務(wù),僅同步active namenode的狀態(tài),以便能夠在它失敗時快速進(jìn)行切換。
hadoop2.x官方提供了兩種HDFS HA的解決方案,一種是NFS,另一種是QJM。這里樓主使用簡單的QJM。在該方案中,主備NameNode之間通過一組JournalNode同步元數(shù)據(jù)信息,一條數(shù)據(jù)只要成功寫入多數(shù)JournalNode即認(rèn)為寫入成功。通常配置奇數(shù)個JournalNode(我配了3個)。
這里還配置了一個zookeeper集群,用于ZKFC(DFSZKFailoverController)故障轉(zhuǎn)移,當(dāng)Active NameNode掛掉了,會自動切換Standby NameNode為standby狀態(tài)。hadoop2.4以前的版本中依然存在一個問題,就是ResourceManager只有一個,存在單點(diǎn)故障,2.4以后解決了這個問題,有兩個ResourceManager,一個是Active,一個是Standby,狀態(tài)由zookeeper進(jìn)行協(xié)調(diào)。yarn的HA配置樓主會給出配置文件,受環(huán)境影響,這里就不搭建yarn的高可用性了。
備6臺Linux機(jī)器
安裝JDK、配置主機(jī)名、修改IP地址、關(guān)閉防火墻
配置SSH免登陸
安裝zookeeper集群
zookeeper、hadoop環(huán)境變量配置
核心配置文件修改
啟動zookeeper集群
啟動journalnode
格式化文件系統(tǒng)、格式化zk
啟動hdfs、啟動yarn
主機(jī)名 | IP | 安裝軟件 | 進(jìn)程 |
hadoop01 | 192.168.8.101 | jdk、hadoop | NameNode、DFSZKFailoverController(zkfc) |
hadoop02 | 192.168.8.102 | jdk、hadoop | NameNode、DFSZKFailoverController(zkfc) |
hadoop03 | 192.168.8.103 | jdk、hadoop | ResourceManager |
hadoop04 | 192.168.8.104 | jdk、hadoop、zookeeper | DataNode、NodeManager、JournalNode、QuorumPeerMain |
hadoop05 | 192.168.8.105 | jdk、hadoop、zookeeper | DataNode、NodeManager、JournalNode、QuorumPeerMain |
hadoop06 | 192.168.8.106 | jdk、hadoop、zookeeper | DataNode、NodeManager、JournalNode、QuorumPeerMain |
1.由于樓主機(jī)器硬件環(huán)境的限制,這里只準(zhǔn)備了6臺centos7的系統(tǒng)。
2.修改IP。如果跟樓主一樣使用VM搭集群,請使用only-host模式。
vim /etc/sysconfig/network-scripts/ifcfg-ens3
TYPE="Ethernet" BOOTPROTO="static" DEFROUTE="yes" PEERDNS="yes" PEERROUTES="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_PEERDNS="yes" IPV6_PEERROUTES="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="ens33" UUID="7f13c30b-0943-49e9-b25d-8aa8cab95e20" DEVICE="ens33" ONBOOT="yes" IPADDR="192.168.8.101"NETMASK="255.255.255.0" GATEWAY="192.168.8.1"
3.修改主機(jī)名和IP的映射關(guān)系
1 vim /etc/host2 3 192.168.8.101 hadoop014 192.168.8.102 hadoop025 192.168.8.103 hadoop036 192.168.8.104 hadoop047 192.168.8.105 hadoop058 192.168.8.106 hadoop06
4.關(guān)閉防火墻
1 systemctl stop firewalld.service //停止firewall2 systemctl disable firewalld.service //禁止firewall開機(jī)啟動
5.修改主機(jī)名
1 hostnamectl set-hostname hadoop012 hostnamectl set-hostname hadoop023 hostnamectl set-hostname hadoop034 hostnamectl set-hostname hadoop045 hostnamectl set-hostname hadoop056 hostnamectl set-hostname hadoop06
6.ssh免登陸
生成公鑰、私鑰
ssh-keygen -t rsa //一直回車
將公鑰發(fā)送到其他機(jī)器
ssh-coyp-id hadoop01 ssh-coyp-id hadoop02 ssh-coyp-id hadoop03 ssh-coyp-id hadoop04 ssh-coyp-id hadoop05 ssh-coyp-id hadoop06
7.安裝JDK,配置環(huán)境變量
hadoop01,hadoop02,hadoop03
1 export JAVA_HOME=/usr/jdk1.7.0_602 export HADOOP_HOME=/home/hadoop/hadoop-2.7.33 export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
hadoop04,hadoop05,hadoop06(包含zookeeper)
1 export JAVA_HOME=/usr/jdk1.7.0_602 export HADOOP_HOME=/home/hadoop/hadoop-2.7.33 export ZOOKEEPER_HOME=/home/hadoop/zookeeper-3.4.104 export PATH=$PATH:$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
1.上傳zk安裝包
上傳到/home/hadoop
2.解壓
tar -zxvf zookeeper-3.4.10.tar.gz
3.配置(先在一臺節(jié)點(diǎn)上配置)
在conf目錄,更改zoo_sample.cfg文件為zoo.cfg
mv zoo_sample.cfg zoo.cfg
修改配置文件(zoo.cfg)
1 dataDir=/home/hadoop/zookeeper-3.4.10/data 2 server.1=hadoop04:2888:38883 server.2=hadoop05:2888:38884 server.3=hadoop06:2888:3888
在(dataDir=/home/hadoop/zookeeper-3.4.10/data)創(chuàng)建一個myid文件,里面內(nèi)容是server.N中的N(server.2里面內(nèi)容為2)
1 echo "5" > myid
4.將配置好的zk拷貝到其他節(jié)點(diǎn)
1 scp -r /home/hadoop/zookeeper-3.4.5/ hadoop05:/home/hadoop2 scp -r /home/hadoop/zookeeper-3.4.5/ hadoop06:/home/hadoop
注意:在其他節(jié)點(diǎn)上一定要修改myid的內(nèi)容
在hadoop05應(yīng)該將myid的內(nèi)容改為2 (echo "6" > myid)
在hadoop06應(yīng)該將myid的內(nèi)容改為3 (echo "7" > myid)
5.啟動集群
分別啟動hadoop04,hadoop05,hadoop06上的zookeeper
1 zkServer.sh start
1.解壓
1 tar -zxvf hadoop-2.7.3.tar.gz
2.配置core-site.xml
12 3 4 7 8fs.defaultFS 5hdfs://ns1 69 12 13hadoop.tmp.dir 10/home/hadoop/hadoop-2.7.3/tmp 1114 17ha.zookeeper.quorum 15hadoop04:2181,hadoop05:2181,hadoop06:2181 16
3.配置hdf-site.xml
12 3 4 7 8dfs.nameservices 5ns1 69 12 13dfs.ha.namenodes.ns1 10nn1,nn2 1114 17 18dfs.namenode.rpc-address.ns1.nn1 15hadoop01:9000 1619 22 23dfs.namenode.http-address.ns1.nn1 20hadoop01:50070 2124 27 28dfs.namenode.rpc-address.ns1.nn2 25hadoop02:9000 2629 32 33dfs.namenode.http-address.ns1.nn2 30hadoop02:50070 3134 37 38dfs.namenode.shared.edits.dir 35qjournal://hadoop04:8485;hadoop05:8485;hadoop06:8485/ns1 3639 42 43dfs.journalnode.edits.dir 40file:/home/hadoop/hadoop-2.7.3/journal 4144 47 48dfs.ha.automatic-failover.enabled 45true 4649 52 53dfs.client.failover.proxy.provider.ns1 50org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider 5154 60 61dfs.ha.fencing.methods 5556 sshfence57 shell(/bin/true)58 5962 65 66dfs.ha.fencing.ssh.private-key-files 63/home/hadoop/.ssh/id_rsa 6467 70dfs.ha.fencing.ssh.connect-timeout 6830000 69
4.配置mapred-site.xml
12 3 4 7mapreduce.framework.name 5yarn 6
5.配置yarn-site.xml
12 3 4 5 6 9yarn.resourcemanager.hostname.rm1 7hadoop03 810 13yarn.nodemanager.aux-services 11mapreduce_shuffle 12
6.配置slaves
1 hadoop042 hadoop053 hadoop06
7.將配置好的hadoop拷貝到其他節(jié)點(diǎn)
scp -r /home/hadoop/hadoop-2.7.3 hadoop02:/home/hadoop scp -r /home/hadoop/hadoop-2.7.3 hadoop03:/home/hadoop scp -r /home/hadoop/hadoop-2.7.3 hadoop04:/home/hadoop scp -r /home/hadoop/hadoop-2.7.3 hadoop05:/home/hadoop scp -r /home/hadoop/hadoop-2.7.3 hadoop06:/home/hadoop
1.啟動zookeeper集群(分別在hadoop04,hadoop05,hadoop06上啟動zookeeper)
1 zkServer.sh start
2.查看zookeeper狀態(tài)
1 zkServer.sh status
包含一個leader,二個follower
3.啟動journalnode(分別在hadoop04,hadoop05,hadoop06上執(zhí)行)
hadoop-daemon.sh start journalnode
運(yùn)行jps命令檢驗(yàn),hadoop04,hadoop05,hadoop06上多了JournalNode進(jìn)程
4.格式化HDFS
在hadoop01上執(zhí)行命令:
1 hdfs namenode -format
檢查是否成功看終端知否打?。?/p>
格式化后會在根據(jù)core-site.xml中的hadoop.tmp.dir配置生成個文件,這里樓主配置的是/home/hadoop/hadoop-2.7.3/tmp,然后將/home/hadoop/hadoop-2.7.3/tmp拷貝到ihadoop02的/home/hadoop/hadoop-2.7.3/下。
1 scp -r tmp/ hadoop02:/hadoop/hadoop-2.7.3/
5.格式化ZK(在hadoop01上執(zhí)行即可)
1 hdfs zkfc -formatZK
效果如下(前面有點(diǎn)多截不下來,只截取了后面一部分):
6.啟動HDFS(在hadoop01上執(zhí)行)
1 start-dfs.sh
7.啟動YARN(在hadoop03上執(zhí)行)
1 start-yarn.sh
到此,hadoop-2.7.3集群全部配置完畢,下面我們來驗(yàn)證:
瀏覽器訪問http://192.168.8.101:50070 NameNode 'hadoop01:9000' (active)
http://192.168.8.102:50070 NameNode 'hadoop02:9000' (standby)
瀏覽器訪問resourceManager:http://192.168.8.103:8088
我們可以模擬NameNode(active)宕機(jī),來驗(yàn)證HDFS的HA是否有效,NameNode(active)宕機(jī)后,NameNode(standby)會轉(zhuǎn)為active狀態(tài),這里樓主不在演示。
官網(wǎng)給出的文檔還是比較詳細(xì)的,樓主也是提取了官網(wǎng)的QJM解決方案來進(jìn)行搭建。另外,yarn的HA搭建官網(wǎng)也給出了具體配置,有興趣的同學(xué)可以試一試。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。