Hadoop-HA 搭建高可用叢集Hadoop Zookeeper
一、準備工作
虛擬機器1:master
虛擬機器2:node1
虛擬機器3:node2
-
時間同步
ntpdate ntp.aliyun.com
-
調整時區
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
-
jdk1.8(以1.8為例,目前大多數企業都是使用1.8版本,最穩定)
java -version
-
修改主機名
三臺分別執行 vim /etc/hostname 並將內容指定為對應的主機名
-
關閉防火牆:systemctl stop firewalld
-
檢視防火牆狀態:systemctl status firewalld
-
取消防火牆自啟:systemctl disable firewalld
-
-
靜態IP配置
-
直接使用圖形化介面配置(不推薦)
-
手動編輯配置檔案進行配置
1、編輯網路配置檔案
vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
HWADDR=00:0C:29:E2:B8:F2
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.190.100
GATEWAY=192.168.190.2
NETMASK=255.255.255.0
DNS1=192.168.190.2
DNS2=223.6.6.6
需要修改:HWADDR(mac地址,centos7不需要手動指定mac地址)
IPADDR(根據自己的網段,自定義IP地址)
GATEWAY(根據自己的網段填寫對應的閘道器地址)
2、關閉NetworkManager,並取消開機自啟
systemctl stop NetworkManager
systemctl disable NetworkManager
3、重啟網路服務
systemctl restart network
-
-
免密登入
# 1、生成金鑰
ssh-keygen -t rsa
注意:連敲三次生成方格形狀的金鑰,在當前狀態下,配置免金鑰登陸。
# 2、配置免密登入(三臺虛擬機器都需要進行免密操作,不要怕麻煩!!)
ssh-copy-id master
ssh-copy-id node1
ssh-copy-id node2
# 3、測試免密登入
ssh node1
ssh node2
ssh master -
配置好對映檔案:/etc/hosts(三臺虛擬機器都需要配置)
192.168.170.100 master
192.168.170.101 node1
192.168.170.102 node2
注意:每個人的IP地址都是不一樣的,檢視自己的IP地址使用 ifconfig
使用遠端複製
cd /etc
scp -r hosts/ node1:`pwd`
scp -r hosts/ node2:`pwd`
二、 Zookeeper 搭建
1、上傳安裝包到master並解壓
tar -xvf zookeeper-3.4.6.tar.gz
官網下載:
https://zookeeper.apache.org/
2、配置環境變數
vim /etc/profile export ZOOKEEPER_HOME=/usr/local/soft/zookeeper-3.4.6 export PATH=$PATH:$ZOOKEEPER_HOME/bin 儲存退出,執行 source /etc/profile 配置node1和node2的環境變數 scp /etc/profile node1:/etc/ scp /etc/profile node2:/etc/ 在所有節點執行 source /etc/profile
3、修改配置檔案
cd /usr/local/soft/zookeeper-3.4.6/(解壓後的目錄) cd conf zoo_sample.cfg(是一個模板檔案,_sample字尾,不起任何效果,需要複製一份) cp zoo_sample.cfg zoo.cfg
修改 dataDir=/usr/local/soft/zookeeper-3.4.6/data 檔案最後位置增加 server.0=master:2888:3888 server.1=node1:2888:3888 server.2=node2:2888:3888
4、同步到其它節點
scp -r zookeeper-3.4.6 node1:`pwd` scp -r zookeeper-3.4.6 node2:`pwd`
5、建立/usr/local/soft/zookeeper-3.4.6/data目錄,所有節點都要建立
mkdir /usr/local/soft/zookeeper-3.4.6/data 在data目錄下建立myid檔案 vim myid master,node1,node2分別加上0,1,2
6、啟動zk, zkServer.sh start 三臺都需要執行
zkServer.sh status 檢視狀態 當有一個leader的時候啟動成功
連線zk zkCli.sh
zk 是一個目錄結構 ,每個節點可以存資料,同時可以有子節點
zk shell
建立目錄 create /test test create /test/a 1
獲取資料 get /test ls /test delete 只能刪除沒有子節點的節點 rmr /test 刪除節點
重置zk 1、殺掉所有zk程序 kiil -9 pid
2、刪除data目錄下的version檔案, 所有節點都要刪除 rm -rf /usr/local/soft/zookeeper-3.4.6/data/version-2
2、啟動zk
一、準備工作(做之前拍攝快照)
VMWARE虛擬機器 CentOS 7 系統
虛擬機器1:master
虛擬機器2:node1
-
時間同步
ntpdate ntp.aliyun.com
-
調整時區
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
-
jdk1.8(以1.8為例,目前大多數企業都是使用1.8版本,最穩定)
java -version
-
修改主機名
三臺分別執行 vim /etc/hostname 並將內容指定為對應的主機名
-
關閉防火牆:systemctl stop firewalld
-
檢視防火牆狀態:systemctl status firewalld
-
取消防火牆自啟:systemctl disable firewalld
-
-
靜態IP配置
-
直接使用圖形化介面配置(不推薦)
-
手動編輯配置檔案進行配置
1、編輯網路配置檔案
vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
HWADDR=00:0C:29:E2:B8:F2
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.190.100
GATEWAY=192.168.190.2
NETMASK=255.255.255.0
DNS1=192.168.190.2
DNS2=223.6.6.6
需要修改:HWADDR(mac地址,centos7不需要手動指定mac地址)
IPADDR(根據自己的網段,自定義IP地址)
GATEWAY(根據自己的網段填寫對應的閘道器地址)
2、關閉NetworkManager,並取消開機自啟
systemctl stop NetworkManager
systemctl disable NetworkManager
3、重啟網路服務
systemctl restart network
-
-
免密登入
# 1、生成金鑰
ssh-keygen -t rsa
注意:連敲三次生成方格形狀的金鑰,在當前狀態下,配置免金鑰登陸。
# 2、配置免密登入(三臺虛擬機器都需要進行免密操作,不要怕麻煩!!)
ssh-copy-id master
ssh-copy-id node1
ssh-copy-id node2
# 3、測試免密登入
ssh node1
ssh node2
ssh master -
配置好對映檔案:/etc/hosts(三臺虛擬機器都需要配置)
192.168.170.100 master
192.168.170.101 node1
192.168.170.102 node2
注意:每個人的IP地址都是不一樣的,檢視自己的IP地址使用 ifconfig
使用遠端複製
cd /etc
scp -r hosts/ node1:`pwd`
scp -r hosts/ node2:`pwd`
二、 Zookeeper 搭建(一中有詳細教程)
ZK NN DN RM NM JN ZKFC
master 1 1 1 1 1
node1 1 1 1 1 1 1 1
node2 1 1 1 1
停止HDFS叢集:stop-dfs.sh
1、修改hadoop配置檔案
cd /usr/local/soft/hadoop-2.7.6/etc/hadoop core-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml
舉例檢視:
[root@master hadoop]# ll 總用量 156 -rw-r--r-- 1 20415 101 4436 4月 18 2018 capacity-scheduler.xml -rw-r--r-- 1 20415 101 1335 4月 18 2018 configuration.xsl -rw-r--r-- 1 20415 101 318 4月 18 2018 container-executor.cfg -rw-r--r-- 1 20415 101 1100 5月 21 15:40 core-site.xml -rw-r--r-- 1 20415 101 3670 4月 18 2018 hadoop-env.cmd -rw-r--r-- 1 20415 101 4269 5月 21 17:38 hadoop-env.sh -rw-r--r-- 1 20415 101 2598 4月 18 2018 hadoop-metrics2.properties -rw-r--r-- 1 20415 101 2490 4月 18 2018 hadoop-metrics.properties -rw-r--r-- 1 20415 101 9683 4月 18 2018 hadoop-policy.xml -rw-r--r-- 1 20415 101 961 5月 21 15:43 hdfs-site.xml -rw-r--r-- 1 20415 101 1449 4月 18 2018 httpfs-env.sh -rw-r--r-- 1 20415 101 1657 4月 18 2018 httpfs-log4j.properties -rw-r--r-- 1 20415 101 21 4月 18 2018 httpfs-signature.secret -rw-r--r-- 1 20415 101 620 4月 18 2018 httpfs-site.xml -rw-r--r-- 1 20415 101 3518 4月 18 2018 kms-acls.xml -rw-r--r-- 1 20415 101 1527 4月 18 2018 kms-env.sh -rw-r--r-- 1 20415 101 1631 4月 18 2018 kms-log4j.properties -rw-r--r-- 1 20415 101 5540 4月 18 2018 kms-site.xml -rw-r--r-- 1 20415 101 11801 4月 18 2018 log4j.properties -rw-r--r-- 1 20415 101 951 4月 18 2018 mapred-env.cmd -rw-r--r-- 1 20415 101 1383 4月 18 2018 mapred-env.sh -rw-r--r-- 1 20415 101 4113 4月 18 2018 mapred-queues.xml.template -rw-r--r-- 1 root root 1116 5月 21 15:44 mapred-site.xml -rw-r--r-- 1 20415 101 758 4月 18 2018 mapred-site.xml.template -rw-r--r-- 1 20415 101 12 5月 21 15:44 slaves -rw-r--r-- 1 20415 101 2316 4月 18 2018 ssl-client.xml.example -rw-r--r-- 1 20415 101 2697 4月 18 2018 ssl-server.xml.example -rw-r--r-- 1 20415 101 2191 4月 18 2018 yarn-env.cmd -rw-r--r-- 1 20415 101 4567 4月 18 2018 yarn-env.sh -rw-r--r-- 1 20415 101 1185 5月 21 15:45 yarn-site.xml
修改配置檔案
core-site.xml
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://cluster</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/soft/hadoop-2.7.6/tmp</value> </property> <property> <name>fs.trash.interval</name> <value>1440</value> </property> <property> <name>ha.zookeeper.quorum</name> <value>master:2181,node1:2181,node2:2181</value> </property> </configuration>
修改配置檔案
hdfs-site.xml
<configuration> <!-- 指定hdfs元資料儲存的路徑 --> <property> <name>dfs.namenode.name.dir</name> <value>/usr/local/soft/hadoop-2.7.6/data/namenode</value> </property> <!-- 指定hdfs資料儲存的路徑 --> <property> <name>dfs.datanode.data.dir</name> <value>/usr/local/soft/hadoop-2.7.6/data/datanode</value> </property> <!-- 資料備份的個數 --> <property> <name>dfs.replication</name> <value>1</value> </property> <!-- 關閉許可權驗證 --> <property> <name>dfs.permissions.enabled</name> <value>false</value> </property> <!-- 開啟WebHDFS功能(基於REST的介面服務) --> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> <!-- //////////////以下為HDFS HA的配置////////////// --> <!-- 指定hdfs的nameservices名稱為mycluster --> <property> <name>dfs.nameservices</name> <value>cluster</value> </property> <!-- 指定cluster的兩個namenode的名稱分別為nn1,nn2 --> <property> <name>dfs.ha.namenodes.cluster</name> <value>nn1,nn2</value> </property> <!-- 配置nn1,nn2的rpc通訊埠 --> <property> <name>dfs.namenode.rpc-address.cluster.nn1</name> <value>master:8020</value> </property> <property> <name>dfs.namenode.rpc-address.cluster.nn2</name> <value>node1:8020</value> </property> <!-- 配置nn1,nn2的http通訊埠 --> <property> <name>dfs.namenode.http-address.cluster.nn1</name> <value>master:50070</value> </property> <property> <name>dfs.namenode.http-address.cluster.nn2</name> <value>node1:50070</value> </property> <!-- 指定namenode元資料儲存在journalnode中的路徑 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://master:8485;node1:8485;node2:8485/cluster</value> </property> <!-- 指定journalnode日誌檔案儲存的路徑 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/usr/local/soft/hadoop-2.7.6/data/journal</value> </property> <!-- 指定HDFS客戶端連線active namenode的java類 --> <property> <name>dfs.client.failover.proxy.provider.cluster</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <!-- 配置隔離機制為ssh --> <property> <name>dfs.ha.fencing.methods</name> <value>sshfence</value> </property> <!-- 指定祕鑰的位置 --> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/root/.ssh/id_rsa</value> </property>: <!-- 開啟自動故障轉移 --> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> </configuration>
yarn 高可用 修改配置檔案
yarn-site.xml
<configuration> <!-- 指定MapReduce計算框架使用YARN --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <!-- 指定jobhistory server的rpc地址 --> <property> <name>mapreduce.jobhistory.address</name> <value>node1:10020</value> </property> <!-- 指定jobhistory server的http地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>node1:19888</value> </property> <!-- 開啟uber模式(針對小作業的優化) --> <property> <name>mapreduce.job.ubertask.enable</name> <value>true</value> </property> <!-- 配置啟動uber模式的最大map數 --> <property> <name>mapreduce.job.ubertask.maxmaps</name> <value>9</value> </property> <!-- 配置啟動uber模式的最大reduce數 --> <property> <name>mapreduce.job.ubertask.maxreduces</name> <value>1</value> </property> </configuration>
修改配置檔案
mapred-site.xml
<!-- 指定MapReduce計算框架使用YARN --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <!-- 指定jobhistory server的rpc地址 --> <property> <name>mapreduce.jobhistory.address</name> <value>node1:10020</value> </property> <!-- 指定jobhistory server的http地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>node1:19888</value> </property> <!-- 開啟uber模式(針對小作業的優化) --> <property> <name>mapreduce.job.ubertask.enable</name> <value>true</value> </property> <!-- 配置啟動uber模式的最大map數 --> <property> <name>mapreduce.job.ubertask.maxmaps</name> <value>9</value> </property> <!-- 配置啟動uber模式的最大reduce數 --> <property> <name>mapreduce.job.ubertask.maxreduces</name> <value>1</value> </property>
5、刪除hadoop資料儲存目錄下的檔案 每個節點都需要刪除(直接刪除其他節點上的 /hadoop-2.7.6/ 資料夾)
注:原來的節點上沒有Hadoop這個檔案就不要刪除了!!
其他節點上刪除 node1 node2 rm -rf /usr/local/soft/hadoop-2.7.6/
同步到其它節點 (遠端複製一份到其他兩個節點上去)
cd /usr/local/soft/ scp -r hadoop-2.7.6/ node1:`pwd` scp -r hadoop-2.7.6/ node2:`pwd`
三、啟動程序 (按照一下順序進行操作)
6、啟動zookeeper 三臺都需要啟動 zkServer.sh start zkServer.sh status
7、啟動JN 儲存hdfs元資料 三臺JN上執行 啟動命令:
cd /usr/local/soft/hadoop-2.7.6/sbin/ hadoop-daemon.sh start journalnode
8、格式化 在一臺NN上執行,這裡選擇master
hdfs namenode -format
啟動當前的NN
hadoop-daemon.sh start namenode
9、執行同步 沒有格式化的NN上執行 在另外一個namenode上面執行 這裡選擇node1
/usr/local/soft/hadoop-2.7.6/bin/ hdfs namenode -bootstrapStandby
10、格式化ZK 在master上面執行 !!一定要先 把zk叢集正常 啟動起來
/usr/local/soft/hadoop-2.7.6/bin/ hdfs zkfc -formatZK
11、啟動hdfs叢集,在master上執行
start-dfs.sh
最後在頁面檢視(以下顯示,叢集搭建成功)
http://master:50070/ 或者 http://192.168.170.110:50070/
http://node1:50070/ 或者 http://192.168.170.120:50070/
關閉
stop-all.sh