一、 環境計劃
hostname | namenode | datanode | zookeeper | zkfc | journalnode | resourcemanager | nodemanager | HMaster | HRegionServer |
hadoop1 | 1 | N/A | 1 | 1 | 1 | ||||
hadoop2 | 1 | N/A | 1 | 1 | 1 | ||||
hadoop3 | 1 | 1 | 1 | 1 | 1 | ||||
hadoop4 | 1 | 1 | 1 | 1 | 1 | ||||
hadoop5 | 1 | 1 | 1 | 1 | 1 |
zookeeper安裝3臺或者5臺,奇數。1
JDK:1.8+
Zookeeper:3.1.4
Hadoop:3.2.0
Hbase:2.2.0
二、 基本環境設置
1、 啓動docker鏡像
給oracle virtual machine default主機分配3G內存
之前的鏡像拉取等等操作請參考我之前的博文
$ docker run -itd --name hadoop -p 5001:22 centos /bin/bash
2、安裝輔助軟件
# yum -y install net-tools.x86_64
# yum install -y which
# yum -y install psmisc
# yum install openssh-server -y
# yum install openssh-clients -y
3、改密碼:
# echo "123456" |passwd --stdin root
# echo "root ALL=(ALL) ALL" >> /etc/sudoers
# ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
# ssh-keygen -t rsa -f /etc/ssh/ssh_host_ecdsa_key
# ssh-keygen -t rsa -f /etc/ssh/ssh_host_ed25519_key
# ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
# mkdir /var/run/sshd
4、ssh免密登錄
# ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
# chmod 0600 ~/.ssh/authorized_keys
Ctrl + P + Q 不停止容器退出
將 jdk、hadoop、zookeeper、hbase安裝包準備好。
5、複製軟件包
$ docker cp ./jdk1.8xxxxxx.tar.gz hadoop:/opt/
$ docker cp ./hbase-2.2.0-bin.tar.gz hadoop:/opt/
$ docker cp ./hadoop-3.2.0.tar.gz hadoop:/opt/
$ docker cp ./zookeeper-3.4.14.tar.gz hadoop:/opt/
6、配置軟件包以及環境變量
$ docker attach hadoop 進入docker容器
加壓後刪除相應tar.gz文件,建立符號鏈接
7、配置HBase
進入hbase的conf目錄
需要增加一個指向hdfs配置文件的符號鏈接
# ln -s /opt/hadoop/etc/hadoop/hdfs-site.xml ./hdfs-site.xml
編輯regionservers內容換成:
hadoop3
hadoop4
hadoop5
配置Hmaster高可用
增加backup-masters文件,內容:
hadoop2
相關配置文件和環境變量請從附件下載
環境變量配置在/root/.bashrc文件中,並按照配置文件中路徑要求手工創建/opt/datas子文件夾
8、配置好後,exit退出容器,製作新的鏡像。
$ docker commit adc93bab571b hadoop3-ha
基於這個鏡像啓動5個容器
docker run -itd --name hadoop1 --add-host hadoop1:172.17.0.2 --add-host hadoop2:172.17.0.3 --add-host hadoop3:172.17.0.4 --add-host hadoop4:172.17.0.5 --add-host hadoop5:172.17.0.6 -p 5002:22 -p 9870:9870 -p 8088:8088 -p 19888:19888 -p 16010:16010 hadoop3-ha /usr/sbin/sshd -D
docker run -itd --name hadoop2 --add-host hadoop1:172.17.0.2 --add-host hadoop2:172.17.0.3 --add-host hadoop3:172.17.0.4 --add-host hadoop4:172.17.0.5 -p 5003:22 --add-host hadoop5:172.17.0.6 -p 9871:9870 -p 8087:8088 -p 16011:16010 hadoop3-ha /usr/sbin/sshd -D
docker run -itd --name hadoop3 --add-host hadoop1:172.17.0.2 --add-host hadoop2:172.17.0.3 --add-host hadoop3:172.17.0.4 --add-host hadoop4:172.17.0.5 -p 5004:22 -p 16020:16020 --add-host hadoop5:172.17.0.6 hadoop3-ha /usr/sbin/sshd -D
docker run -itd --name hadoop4 --add-host hadoop1:172.17.0.2 --add-host hadoop2:172.17.0.3 --add-host hadoop3:172.17.0.4 --add-host hadoop4:172.17.0.5 -p 5005:22 -p 16021:16020 --add-host hadoop5:172.17.0.6 hadoop3-ha /usr/sbin/sshd -D
docker run -itd --name hadoop5 --add-host hadoop1:172.17.0.2 --add-host hadoop2:172.17.0.3 --add-host hadoop3:172.17.0.4 --add-host hadoop4:172.17.0.5 -p 5006:22 -p 16022:16020 --add-host hadoop5:172.17.0.6 hadoop3-ha /usr/sbin/sshd -D
使用ssh客戶端分別登錄這5個容器
三、 第一次啓動設置
1.啓動zookeeper 3臺(出現一個leader,三個follower,啓動成功)
修改/opt/zookeeper/data/myid,3個容器的myid內容分別是
hadoop3對應1,hadoop4對應2,hadoop5對應3
進入zookeeper根目錄
# bin/zkServer.sh start
1.1分別在3臺虛擬機上查看zookeeper的狀態。
#bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: follower
1.2 連接其中一臺的zookeeper
#bin/zkCli.sh -server hadoop3:2181
1.3寫入數據
WatchedEvent state:SyncConnected type:None path:null
[zk: hadoop3:2181(CONNECTED) 0]
create /test data
Created /test
1.4再連接另外一臺的zookeeper
#bin/zkCli.sh -server hadoop4:2181
1.5如果能獲取到剛纔寫入的數據,則Zookeeper集羣安裝成功。
WatchedEvent state:SyncConnected type:None path:null
[zk: hadoop4:2181(CONNECTED) 0] get /test
data
cZxid = 0x100000002
ctime = Wed Jun 26 16:43:13 UTC 2019
mZxid = 0x100000002
mtime = Wed Jun 26 16:43:13 UTC 2019
pZxid = 0x100000002
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0
2.啓動journalnode(分別在hadoop3、hadoop4、hadoop5上執行)
# cd /opt/hadoop/
# bin/hdfs --daemon start journalnode
或者以下命令也是開啓 journalnode(不推薦)
# sbin/hadoop-deamon.sh start journalnode
# jps
1553 Jps
993 QuorumPeerMain
1514 JournalNode
# jps
993 QuorumPeerMain
1514 JournalNode
1563 Jps
出現JournalNode則表示journalnode啓動成功。
3.格式化namenode(只要格式化一臺,另一臺同步,兩臺都格式化,你就做錯了!!如:在hadoop2節點上)
進入容器hadoop1
# bin/hdfs namenode -format
如果在倒數8行左右的地方,出現這一句就表示成功
INFO common.Storage: Storage directory /home/hadoop/tmp/dfs/name has been successfully formatted.
啓動namenode
# bin/hdfs --daemon start namenode
# jps
1681 NameNode
1747 Jps
# cat /opt/datas/hadoop/ha-hadoop/hdfs/namenode/current/VERSION
#Tue Jun 25 14:59:40 UTC 2019
namespaceID=1463663733
clusterID=CID-32938cd0-ed33-40f6-90c5-2326198e31bd
cTime=1561474780005
storageType=NAME_NODE
blockpoolID=BP-789586919-172.17.0.2-1561474780005
layoutVersion=-65
4.同步hadoop1元數據到hadoop2中(必須先啓動hadoop1節點上的namenode)
在hadoop2主機上執行:
# bin/hdfs namenode -bootstrapStandby
如果出現:INFO common.Storage: Storage directory /home/hadoop/tmp/dfs/name has been successfully formatted.
說明同步成功
# cat /opt/datas/hadoop/ha-hadoop/hdfs/namenode/current/VERSION
#Tue Jun 25 15:07:27 UTC 2019
namespaceID=1463663733
clusterID=CID-32938cd0-ed33-40f6-90c5-2326198e31bd
cTime=1561474780005
storageType=NAME_NODE
blockpoolID=BP-789586919-172.17.0.2-1561474780005
layoutVersion=-65
hadoop1和hadoop2顯示的信息一致,則namenode數據同步成功
5.格式化ZKFC(在hadoop1上執行一次即可)
# bin/hdfs zkfc -formatZK
若在倒數第4行顯示:INFO ha.ActiveStandbyElector: Successfully created /hadoop-ha/mycluster in ZK.
則表示ZKFC格式化成功
6.啓動HDFS、yarn(在hadoop1上執行)
# sbin/start-dfs.sh
# sbin/start-yarn.sh
7、進入hbase根目錄啓動hbase
bin/start-hbase.sh
8、訪問節點信息:
訪問http://192.168.99.100:9870
yarn rmadmin -getServiceState rm1
yarn rmadmin -getServiceState rm2
拿active狀態的節點映射端口比如8086訪問
http://192.168.99.100:8087
查看hbase節點狀態:
9、啓停JobHistory(查看MapReduce任務)
/opt/hadoop/sbin/mr-jobhistory-daemon.sh start historyserver
/opt/hadoop/sbin/mr-jobhistory-daemon.sh stop historyserver
10、首次啓動後,停止服務時,先停止,再停止hbase/bin/stop-hbase.sh,最後停止zookeeper/bin/zkServer.sh stop
再次啓動 hadoop3、hadoop4、hadoop5上一次啓動zookeeper/bin/zkServer.sh start
hadoop1節點上執行hadoop/sbin/start-all.sh
hbase/bin/start-hbase.sh