環境準備
| 編號 | 主機名 | 型別 | 用戶 | IP |
|---|---|---|---|---|
| 1 | master | 主節點 | root | 192.168.231.247 |
| 2 | slave1 | 從節點 | root | 192.168.231.248 |
| 3 | slave2 | 從節點 | root | 192.168.231.249 |
環境搭建
一、基礎配置
1、安裝VMware tools
將其復制到桌面
注:遇到提示按 '回車' 鍵,遇到 'yes/no' 輸入yes
安裝完成Tools后的效果如圖
2、修改root密碼

3、更新 apt,安裝vim編譯器
apt-get update
apt-get install vim
注:vim 編譯器相對于 vi 編譯器 對用戶來說更友好,使用便捷,且有高亮關鍵字的功能
4、安裝ssh服務
apt-get install openssh-server

5、修改ssh組態檔,允許root遠程登錄
vim /etc/ssh/sshd_config更改前:
更改后:
注:將 prohibit-password 更改為 yes
6、去掉初始詢問
vi /etc/ssh/ssh_config更改前:
更改后:
![]()
7、關閉防火墻
ufw disable
ufw status

8、環境配置
(1)修改hosts檔案
vim /etc/hosts
(2)添加環境變數
vim /etc/profile
(3)解壓 jdk
tar -zxvf jdk1.8.0_221.tar.gz -C /usr/local/src/重命名其名稱為 jdk
mv jdk1.8.0_221 jdk
(4)hadoop配置
tar -zxvf hadoop-2.7.1.tar.gz -C /usr/local/重命名其名稱為hadoop
mv hadoop-2.7.1 hadoop
在hadoop安裝目錄下創建 tmp 和 logs目錄
在tmp目錄下創建 data 和 name 和 journal 目錄
![]()
進入hadoop組態檔目錄進行修改組態檔
hadoop-env.sh core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml yarn-env.sh slaves
其中hadoop-env.sh 與 yarn-env.sh 只需要修改其中的 jdk 路徑
hadoop-env.sh
yarn-env.sh
注:yarn-env.sh 檔案中jdk路徑需要去掉注釋,否則無法生效
core-site.xml
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://mycluster</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop/tmp</value> </property> <property> <name>ha.zookeeper.quorum</name> <value>master:2181,slave1:2181,slave2:2181</value> </property> <property> <name>ha.zookeeper.session-timeout.ms</name> <value>30000</value> <description>ms</description> </property> <property> <name>fs.trash.interval</name> <value>1440</value> </property> </configuration>hdfs-site.xml
<configuration> <property> <name>dfs.qjournal.start-segment.timeout.ms</name> <value>60000</value> </property> <property> <name>dfs.nameservices</name> <value>mycluster</value> </property> <property> <name>dfs.ha.namenodes.mycluster</name> <value>master,slave1</value> </property> <property> <name>dfs.namenode.rpc-address.mycluster.master</name> <value>master:9000</value> </property> <property> <name>dfs.namenode.rpc-address.mycluster.slave1</name> <value>slave1:9000</value> </property> <property> <name>dfs.namenode.http-address.mycluster.master</name> <value>master:50070</value> </property> <property> <name>dfs.namenode.http-address.mycluster.slave1</name> <value>slave1:50070</value> </property> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://master:8485;slave1:8485;slave2:8485/mycluster</value> </property> <property> <name>dfs.client.failover.proxy.provider.mycluster</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> <property> <name>dfs.permissions.enabled</name> <value>false</value> </property> <property> <name>dfs.support.append</name> <value>true</value> </property> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/root/.ssh/id_rsa</value> </property> <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>/usr/local/hadoop/tmp/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/usr/local/hadoop/tmp/data</value> </property> <property> <name>dfs.journalnode.edits.dir</name> <value>/usr/local/hadoop/tmp/journal</value> </property> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> <property> <name>dfs.ha.fencing.ssh.connect-timeout</name> <value>30000</value> </property> <property> <name>ha.failover-controller.cli-check.rpc-timeout.ms</name> <value>60000</value> </property> </configuration>mapred-site.xml
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>master:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>master:19888</value> </property> </configuration>yarn-site.xml
<configuration> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <property> <name>yarn.resourcemanager.cluster-id</name> <value>yrc</value> </property> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>master</value> </property> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>slave1</value> </property> <property> <name>yarn.resourcemanager.zk-address</name> <value>master:2181,slave1:2181,slave2:2181</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>86400</value> </property> <property> <name>yarn.resourcemanager.recovery.enabled</name> <value>true</value> </property> <property> <name>yarn.resourcemanager.store.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value> </property> </configuration>slaves
master slave1 slave2(5)zookeeper配置
解壓zookeeper
tar -zxvf zookeeper-3.4.8.tar.gz -C /usr/local/src/重命名其名稱為zookeeper
mv zookeeper-3.4.8 zookeeper在zookeeper安裝目錄下創建 logs 目錄和 data 目錄
在data目錄下創建myid檔案并寫入內容 “1”
進入zookeeper/conf目錄下,重命名 zoo_sample.cfg 為 zoo.cfg
編輯zoo.cfg檔案
修改前:
修改后:
二、三臺機器集群搭建
1、關機狀態下克隆出另外兩臺虛擬機
2、三臺機器分別修改靜態IP
3、重啟三臺機器網路服務
service networking restart
4、內網與外網的檢查

5、三臺機器分別修改其主機名
hostnamectl set-hostname master
hostnamectl set-hostname slave1
hostnamectl set-hostname slave2
6、修改其他兩臺機器zookeeper/data/myid檔案分別為2和3
7、重啟三臺機器
reboot
8、設定ssh免密
生成密鑰
ssh-keygen -t rsa
分發密鑰
ssh-copy-id 192.168.231.248 ssh-copy-id 192.168.231.249
9、使三臺機器的環境變數生效
source /etc/profile
10、啟動三臺機器的zookeeper集群
bin/zkServer.sh start
bin/zkServer.sh status
11、格式化zookeeper在HA中的狀態
bin/hdfs zkfc -formatZK

12、啟動三臺機器的 journalnode行程
sbin/hadoop-daemon.sh start journalnode
13、格式化namenode
bin/hdfs namenode -format
注:觀察是否有報錯資訊,status是否為0,0即為初始化成功,1則報錯,檢查組態檔是否有誤
14、啟動hadoop所有行程
sbin/start-all.sh

15、格式化主從節點
復制namenode元資料到從節點
scp -r /usr/local/hadoop/tmp/* slave1:/usr/local/hadoop/tmp/
scp -r /usr/local/hadoop/tmp/* slave2:/usr/local/hadoop/tmp/
![]()
注:由于之前namenode,datanode,journalnode的資料全部存放在hadoop/tmp目錄下,所以直接復制 tmp 目錄至從節點
16、啟動slave1的resourcemanager 和 namenode 行程
sbin/yarn-daemon.sh start resourcemanager
sbin/hadoop-daemon.sh start namenode

17、訪問 resourcemanager 和 namenode 的web頁面
18、殺死master端的namenode(模擬master宕機后HA的故障轉移)
kill -9 (namenode行程號)
注: 可見,在naster宕機后,slave自動接替了master的作業,成為活躍狀態,此為HA 的故障轉移機制
19、重啟master端的namenode行程,觀察作業狀態
sbin/hadoop-daemon.sh start namenode

注:可見,在master重新恢復狀態后,slave依然為active狀態,master為備用狀態
鏈接參考
Centos搭建hadoopHA高可用
https://blog.csdn.net/m0_54925305/article/details/121566611?spm=1001.2014.3001.5502HadoopHA作業機制高可用理論
https://blog.csdn.net/m0_54925305/article/details/119838341?spm=1001.2014.3001.5502
更多環境搭建參見主頁
托馬斯-酷濤的博客主頁
https://blog.csdn.net/m0_54925305?type=blog
每日一悟:將時間和精力投資于自己一定是一筆穩賺不賠的交易
--托馬斯
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/401521.html
標籤:其他





















































