1. 程式人生 > >hadoop+zookeeper高可用,yarn高可用,Hbase高可用叢集部署

hadoop+zookeeper高可用,yarn高可用,Hbase高可用叢集部署

[root@server1 ~]# /etc/init.d/nfs start  開啟服務
[root@server1 ~]# showmount -e
Export list for server1:
/home/hadoop *
[root@server1 ~]# su - hadoop
[hadoop@server1 ~]$ 
[hadoop@server1 ~]$ ls
hadoop        hadoop-2.7.3.tar.gz  jdk1.7.0_79
hadoop-2.7.3  java                 jdk-7u79-linux-x64.tar.gz
[hadoop@server1
~]$ rm -fr /tmp/* [hadoop@server1 ~]$ ls hadoop java zookeeper-3.4.9.tar.gz hadoop-2.7.3 jdk1.7.0_79 hadoop-2.7.3.tar.gz jdk-7u79-linux-x64.tar.gz [hadoop@server1 ~]$ tar zxf zookeeper-3.4.9.tar.gz 解壓zookeeper包

這裡寫圖片描述
配置server5作為高可用節點:

[root@server5 ~]# yum install nfs-utils -y  安裝服務
[root@server5 ~]# /etc/init.d/rpcbind start 開啟服務 [ OK ] [root@server5 ~]# /etc/init.d/nfs start 開啟nfs服務 [root@server5 ~]# useradd -u 800 hadoop [root@server5 ~]# mount 172.25.38.1:/home/hadoop/ /home/hadoop/ 掛載 [root@server5 ~]# df 檢視掛載 Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/VolGroup-lv_root 19134332 929548 17232804 6% / tmpfs 380140 0 380140 0% /dev/shm /dev/vda1 495844 33478 436766 8% /boot 172.25.38.1:/home/hadoop/ 19134336 3289728 14872704 19% /home/hadoop [root@server5 ~]# su - hadoop [hadoop@server5 ~]$ ls hadoop hadoop-2.7.3.tar.gz jdk1.7.0_79 主機均已經同步 hadoop-2.7.3 java jdk-7u79-linux-x64.tar.gz [hadoop@server5 ~]$ rm -fr /tmp/*

這裡寫圖片描述
配置從節點:

[[email protected] ~]# mount 172.25.38.1:/home/hadoop/ /home/hadoop/  掛載
[[email protected] ~]# df  檢視掛載
Filesystem                   1K-blocks    Used Available Use% Mounted on
/dev/mapper/VolGroup-lv_root  19134332 1860136  16302216  11% /
tmpfs                           251120       0    251120   0% /dev/shm
/dev/vda1                       495844   33478    436766   8% /boot
172.25.38.1:/home/hadoop/     19134336 3289728  14872704  19% /home/hadoop
[[email protected] ~]# rm -fr /tmp/*
[[email protected] ~]# su - hadoop
[[email protected] ~]$ ls
hadoop               java                       zookeeper-3.4.9
hadoop-2.7.3         jdk1.7.0_79                zookeeper-3.4.9.tar.gz
hadoop-2.7.3.tar.gz  jdk-7u79-linux-x64.tar.gz
[[email protected] ~]$ cd zookeeper-3.4.9
[[email protected] zookeeper-3.4.9]$ ls
bin          dist-maven       LICENSE.txt           src
build.xml    docs             NOTICE.txt            zookeeper-3.4.9.jar
CHANGES.txt  ivysettings.xml  README_packaging.txt  zookeeper-3.4.9.jar.asc
conf         ivy.xml          README.txt            zookeeper-3.4.9.jar.md5
contrib      lib              recipes               zookeeper-3.4.9.jar.sha1
[[email protected] zookeeper-3.4.9]$ cd conf/
[[email protected] conf]$ ls
configuration.xsl  log4j.properties  zoo_sample.cfg

這裡寫圖片描述
新增從節點資訊:

[hadoop@server2 conf]$ cp zoo_sample.cfg zoo.cfg 
[hadoop@server2 conf]$ vim zoo.cfg 
[hadoop@server2 conf]$ cat zoo.cfg | tail -n 3
server.1=172.25.38.2:2888:3888
server.2=172.25.38.3:2888:3888
server.3=172.25.38.4:2888:3888
[hadoop@server2 conf]$ mkdir /tmp/zookeeper
[hadoop@server2 conf]$ cd /tmp/zookeeper/
[hadoop@server2 zookeeper]$ ls
[hadoop@server2 zookeeper]$ echo 1 > myid
[hadoop@server2 zookeeper]$ ls
myid
[hadoop@server2 zookeeper]$ cd 
[hadoop@server2 ~]$ cd zookeeper-3.4.9/conf/
[hadoop@server2 conf]$ ls
configuration.xsl  log4j.properties  zoo.cfg  zoo_sample.cfg
[hadoop@server2 conf]$ cd ..
[hadoop@server2 zookeeper-3.4.9]$ cd bin/

這裡寫圖片描述
各節點配置檔案相同,並且需要在/tmp/zookeeper 目錄中建立 myid 檔案,寫入一個唯一的數字,取值範圍在 1-255。

[[email protected] zookeeper-3.4.9]$ cd bin/
[[email protected] bin]$ ls
README.txt    zkCli.cmd  zkEnv.cmd  zkServer.cmd
zkCleanup.sh  zkCli.sh   zkEnv.sh   zkServer.sh
[[email protected] bin]$ ./zkServer.sh start  開啟服務

這裡寫圖片描述
依次按照同樣的方法配置其他節點:

[root@server3 ~]# mount 172.25.38.1:/home/hadoop/ /home/hadoop/
[root@server3 ~]# df
Filesystem                   1K-blocks    Used Available Use% Mounted on
/dev/mapper/VolGroup-lv_root  19134332 1537052  16625300   9% /
tmpfs                           251124       0    251124   0% /dev/shm
/dev/vda1                       495844   33478    436766   8% /boot
172.25.38.1:/home/hadoop/     19134336 3289728  14872704  19% /home/hadoop
[root@server3 ~]# rm -fr /tmp/*
[root@server3 ~]# su - hadoop
[hadoop@server3 ~]$ ls
hadoop               java                       zookeeper-3.4.9
hadoop-2.7.3         jdk1.7.0_79                zookeeper-3.4.9.tar.gz
hadoop-2.7.3.tar.gz  jdk-7u79-linux-x64.tar.gz
[hadoop@server3 ~]$ mkdir /tmp/zookeeper
[hadoop@server3 ~]$ cd /tmp/zookeeper/
[hadoop@server3 zookeeper]$ ls
[hadoop@server3 zookeeper]$ echo 2 > myid
[hadoop@server3 zookeeper]$ cd

這裡寫圖片描述

[[email protected] ~]$ cd zookeeper-3.4.9/bin/
[[email protected] bin]$ ls
README.txt    zkCli.cmd  zkEnv.cmd  zkServer.cmd  zookeeper.out
zkCleanup.sh  zkCli.sh   zkEnv.sh   zkServer.sh
[[email protected] bin]$ ./zkServer.sh start

這裡寫圖片描述

[root@server4 ~]# mount 172.25.38.1:/home/hadoop/ /home/hadoop/
[root@server4 ~]# df
Filesystem                   1K-blocks    Used Available Use% Mounted on
/dev/mapper/VolGroup-lv_root  19134332 1350656  16811696   8% /
tmpfs                           251124       0    251124   0% /dev/shm
/dev/vda1                       495844   33478    436766   8% /boot
172.25.38.1:/home/hadoop/     19134336 3289728  14872704  19% /home/hadoop
[root@server4 ~]# rm -fr /tmp/*
[root@server4 ~]# su - hadoop
[hadoop@server4 ~]$ mkdir /tmp/zookeeper
[hadoop@server4 ~]$ cd /tmp/zookeeper/
[hadoop@server4 zookeeper]$ ls
[hadoop@server4 zookeeper]$ echo 3 >myid
[hadoop@server4 zookeeper]$ ls
myid
[hadoop@server4 zookeeper]$ cd 
[hadoop@server4 ~]$ cd zookeeper-3.4.9/bin/
[hadoop@server4 bin]$ ./zkServer.sh start
ZooKeeper JMX enabled by default

這裡寫圖片描述
在server2進入命令列:

[[email protected] bin]$ ls
README.txt    zkCli.cmd  zkEnv.cmd  zkServer.cmd  zookeeper.out
zkCleanup.sh  zkCli.sh   zkEnv.sh   zkServer.sh
[[email protected] bin]$ pwd
/home/hadoop/zookeeper-3.4.9/bin
[[email protected] bin]$ ./zkCli.sh   連線zookeeper
[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 1] ls /zookeeper
[quota]
[zk: localhost:2181(CONNECTED) 2] ls /zookeeper/quota 
[]
[zk: localhost:2181(CONNECTED) 3] get /zookeeper/quota  

cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x0
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 0

這裡寫圖片描述
進行hadoop的配置詳解:

[[email protected] ~]$ ls
hadoop               java                       zookeeper-3.4.9
hadoop-2.7.3         jdk1.7.0_79                zookeeper-3.4.9.tar.gz
hadoop-2.7.3.tar.gz  jdk-7u79-linux-x64.tar.gz
[[email protected] ~]$ cd hadoop/etc/hadoop/
[[email protected] hadoop]$ vim core-site.xml 
<configuration>
指定 hdfs 的 namenode 為 masters (名稱可自定義)
<property>
    <name>fs.defaultFS</name>
        <value>hdfs://masters</value>
            </property>
<property>
指定 zookeeper 叢集主機地址
<name>ha.zookeeper.quorum</name>
<value>172.25.38.2:2181,172.25.38.3:2181,172.25.38.4:2181</value>
</property>
</configuration>

這裡寫圖片描述

[[email protected] hadoop]$ vim hdfs-site.xml 
[[email protected] hadoop]$ cat hdfs-site.xml | tail -n 74
<configuration>
<property>
    <name>dfs.replication</name>
        <value>3</value>
            </property>
<property>

指定 hdfs 的 nameservices 為 masters,和 core-site.xml 檔案中的設定保持一致

<name>dfs.nameservices</name>
<value>masters</value>
</property>

masters 下面有兩個 namenode 節點,分別是 h1 和 h2

<property>
<name>dfs.ha.namenodes.masters</name>
<value>h1,h2</value>
</property>

指定 h1 節點的 rpc 通訊地址

<property>
<name>dfs.namenode.rpc-address.masters.h1</name>
<value>172.25.38.1:9000</value>
</property>

指定 h1 節點的 http 通訊地址

<property>
<name>dfs.namenode.http-address.masters.h1</name>
<value>172.25.38.1:50070</value>
</property>

指定 h2 節點的 rpc 通訊地址

<property>
<name>dfs.namenode.rpc-address.masters.h2</name>
<value>172.25.38.5:9000</value>
</property>

指定 h2 節點的 http 通訊地址

<property>
<name>dfs.namenode.http-address.masters.h2</name>
<value>172.25.38.5:50070</value>
</property>

指定 NameNode 元資料在 JournalNode 上的存放位置

<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://172.25.38.2:8485;172.25.38.3:8485;172.25.38.4:8485/masters</value>
</property>

指定 JournalNode 在本地磁碟存放資料的位置

<property>
<name>dfs.journalnode.edits.dir</name>
<value>/tmp/journaldata</value>
</property>

開啟 NameNode 失敗自動切換

<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>

配置失敗自動切換實現方式

<property>
<name>dfs.client.failover.proxy.provider.masters</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>

配置隔離機制方法,每個機制佔用一行

<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>

使用 sshfence 隔離機制時需要 ssh 免密碼

<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>

配置 sshfence 隔離機制超時時間

<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>

</configuration>
[hadoop@server1 hadoop]$ pwd
/home/hadoop/hadoop/etc/hadoop
[hadoop@server1 hadoop]$ vim slaves 
[hadoop@server1 hadoop]$ cat slaves 
172.25.38.2
172.25.38.3
172.25.38.4

這裡寫圖片描述
啟動 hdfs 叢集(按順序啟動)在三個 DN 上依次啟動 zookeeper 叢集
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
在三個 DN 上依次啟動 journalnode(第一次啟動 hdfs 必須先啟動 journalnode)

[hadoop@server2 hadoop]$ pwd
/home/hadoop/hadoop
[hadoop@server2 hadoop]$ ls
bigfile  etc      input  libexec      logs        output      sbin
bin      include  lib    LICENSE.txt  NOTICE.txt  README.txt  share
[hadoop@server2 hadoop]$ sbin/hadoop-daemon.sh start journalnode
starting journalnode, logging to /home/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-journalnode-server2.out
[hadoop@server2 hadoop]$ jps
1459 JournalNode
1508 Jps
1274 QuorumPeerMain

這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
測試與server5的免密連線,傳遞配置檔案搭建高可用:

[hadoop@server1 hadoop]$ pwd
/home/hadoop/hadoop
[hadoop@server1 hadoop]$ ls
bigfile  etc      input  libexec      logs        output      sbin
bin      include  lib    LICENSE.txt  NOTICE.txt  README.txt  share
[hadoop@server1 hadoop]$ bin/hdfs namenode -format
[hadoop@server1 hadoop]$ ssh server5
[hadoop@server5 ~]$ exit
logout
Connection to server5 closed.
[hadoop@server1 hadoop]$ ssh 172.25.38.5
Last login: Tue Aug 28 10:40:53 2018 from server1
[hadoop@server5 ~]$ exit
logout
Connection to 172.25.38.5 closed.
[hadoop@server1 hadoop]$ scp -r /tmp/hadoop-hadoop/ 172.25.38.5:/tmp/
fsimage_0000000000000000000                        100%  353     0.3KB/s   00:00    
VERSION                                            100%  202     0.2KB/s   00:00    
seen_txid                                          100%    2     0.0KB/s   00:00    
fsimage_0000000000000000000.md5                    100%   62     0.1KB/s   00:00    

這裡寫圖片描述
格式化 zookeeper (只需在 h1 上執行即可)

[hadoop@server1 hadoop]$ ls
bigfile  etc      input  libexec      logs        output      sbin
bin      include  lib    LICENSE.txt  NOTICE.txt  README.txt  share
[hadoop@server1 hadoop]$ bin/hdfs zkfc -formatZK

啟動 hdfs 叢集(只需在 h1 上執行即可)

[hadoop@server1 hadoop]$ sbin/start-dfs.sh  免密沒有做好的話需要卡住的時候輸入yes

這裡寫圖片描述
在server2進入命令列:

[[email protected] ~]$ ls
hadoop        hadoop-2.7.3.tar.gz  jdk1.7.0_79                zookeeper-3.4.9
hadoop-2.7.3  java                 jdk-7u79-linux-x64.tar.gz  zookeeper-3.4.9.tar.gz
[[email protected] ~]$ cd zookeeper-3.4.9
[[email protected] zookeeper-3.4.9]$ ls
bin          dist-maven       LICENSE.txt           src
build.xml    docs             NOTICE.txt            zookeeper-3.4.9.jar
CHANGES.txt  ivysettings.xml  README_packaging.txt  zookeeper-3.4.9.jar.asc
conf         ivy.xml          README.txt            zookeeper-3.4.9.jar.md5
contrib      lib              recipes               zookeeper-3.4.9.jar.sha1
[[email protected] zookeeper-3.4.9]$ bin/zkCli.sh 
[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper, hadoop-ha]
[zk: localhost:2181(CONNECTED) 1] ls /hadoop-ha
[masters]
[zk: localhost:2181(CONNECTED) 2] ls
[zk: localhost:2181(CONNECTED) 3] ls /hadoop-ha/masters
[ActiveBreadCrumb, ActiveStandbyElectorLock]
[zk: localhost:2181(CONNECTED) 4] ls /hadoop-ha/masters/Active

ActiveBreadCrumb           ActiveStandbyElectorLock
[zk: localhost:2181(CONNECTED) 4] ls /hadoop-ha/masters/ActiveBreadCrumb
[]
[zk: localhost:2181(CONNECTED) 5] get /hadoop-ha/masters/ActiveBreadCrumb

mastersh2server5 �F(�>    當前master為server5
cZxid = 0x10000000a
ctime = Tue Aug 28 10:46:47 CST 2018
mZxid = 0x10000000a
mtime = Tue Aug 28 10:46:47 CST 2018
pZxid = 0x10000000a
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 28
numChildren = 0

這裡寫圖片描述
檢視主從節點程序:
這裡寫圖片描述
這裡寫圖片描述
在網頁檢視server1和server5的狀態,一個為active,一個為standby
這裡寫圖片描述
這裡寫圖片描述
測試故障自動切換:

[hadoop@server5 ~]$ ls
hadoop        hadoop-2.7.3.tar.gz  jdk1.7.0_79                zookeeper-3.4.9
hadoop-2.7.3  java                 jdk-7u79-linux-x64.tar.gz  zookeeper-3.4.9.tar.gz
[hadoop@server5 ~]$ cd hadoop
[hadoop@server5 hadoop]$ ls
bigfile  etc      input  libexec      logs        output      sbin
bin      include  lib    LICENSE.txt  NOTICE.txt  README.txt  share
[hadoop@server5 hadoop]$ bin/hdfs dfs -mkdir /user
[hadoop@server5 hadoop]$ bin/hdfs dfs -mkdir /user/hadoop
[hadoop@server5 hadoop]$ bin/hdfs dfs -ls
[hadoop@server5 hadoop]$ bin/hdfs dfs -put etc/hadoop/ input
[hadoop@server5 hadoop]$ bin/hdfs dfs -ls
Found 1 items
drwxr-xr-x   - hadoop supergroup          0 2018-08-28 10:59 input
[hadoop@server5 hadoop]$ jps
1479 DFSZKFailoverController
1382 NameNode
1945 Jps
[hadoop@server5 hadoop]$ kill -9 1382   直接結束程序

這裡寫圖片描述
在server2的命令列檢視:

[zk: localhost:2181(CONNECTED) 6] get /hadoop-ha/masters/ActiveBreadCrumb

mastersh1server1 �F(�>   master已經變成了server1
cZxid = 0x10000000a
ctime = Tue Aug 28 10:46:47 CST 2018
mZxid = 0x10000000f
mtime = Tue Aug 28 11:00:22 CST 2018
pZxid = 0x10000000a
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 28
numChildren = 0

這裡寫圖片描述

[hadoop@server5 hadoop]$ pwd
/home/hadoop/hadoop
[hadoop@server5 hadoop]$ jps
1479 DFSZKFailoverController
1991 Jps
[hadoop@server5 hadoop]$ sbin/hadoop-daemon.sh start namenode  恢復節點
starting namenode, logging to /home/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-namenode-server5.out
[hadoop@server5 hadoop]$ jps  檢視程序已經恢復
1479 DFSZKFailoverController
2020 NameNode
2100 Jps

這裡寫圖片描述
yarn 的高可用

[[email protected] hadoop]$ ls
bigfile  etc      input  libexec      logs        output      sbin
bin      include  lib    LICENSE.txt  NOTICE.txt  README.txt  share
[[email protected] hadoop]$ pwd
/home/hadoop/hadoop
[[email protected] hadoop]$ cd etc/hadoop/
[[email protected] hadoop]$ cp mapred-site.xml.template mapred-site.xml
[[email protected] hadoop]$ vim mapred-site.xml
[[email protected] hadoop]$ cat mapred-site.xml | tail -n 8
<configuration>

<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

</configuration>

這裡寫圖片描述

[[email protected] hadoop]$ vim mapred-site.xml
[[email protected] hadoop]$ cat mapred-site.xml | tail -n 8
<configuration>

<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

</configuration>
[[email protected] hadoop]$ vim yarn-site.xml 
[[email protected] hadoop]$ cat yarn-site.xml | tail -n 48
<configuration>

配置可以在 nodemanager 上執行 mapreduce 程式

<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>

啟用 RM 高可用

<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>

指定 RM 的叢集 id

<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>RM_CLUSTER</value>
</property>

定義 RM 的節點

<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>

指定 RM1 的地址

<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>172.25.38.1</value>
</property>

指定 RM2 的地址

<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>172.25.38.5</value>
</property>

啟用 RM 自動恢復

<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>

配置 RM 狀態資訊儲存方式,有 MemStore 和 ZKStore

<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>

配置為 zookeeper 儲存時,指定 zookeeper 叢集的地址

<property>
<name>yarn.resourcemanager.zk-address</name>
<value>172.25.38.2:2181,172.25.38.3:2181,172.25.38.4:2181</value>
</property>

</configuration>

啟動 yarn 服務

[hadoop@server1 hadoop]$ cd ..
[hadoop@server1 etc]$ cd ..
[hadoop@server1 hadoop]$ pwd
/home/hadoop/hadoop
[hadoop@server1 hadoop]$ sbin/start-yarn.sh
[hadoop@server1 hadoop]$ jps
1606 NameNode
2409 Jps
1900 DFSZKFailoverController
2335 ResourceManager

這裡寫圖片描述

[hadoop@server4 hadoop]$ jps
1407 DataNode
1645 NodeManager
1205 QuorumPeerMain
1316 JournalNode
1759 Jps

這裡寫圖片描述
server5需要手動啟動:

[hadoop@server5 ~]$ ls
hadoop        hadoop-2.7.3.tar.gz  jdk1.7.0_79                zookeeper-3.4.