一、環境資源
JDK和Hadoop存在版本相容問題,選擇安裝包的時候一定要考慮到兩個軟體的版本相容,我這裡選擇的安裝版本如下:
- JDK1.8:https://pan.baidu.com/s/1Rm5ErmvKFjVmwx1uAF90vQ 提取碼:kpre
- Hadoop2.7:https://pan.baidu.com/s/1xynMsryyTDZBn_ApgbuTSA 提取碼:ir1l
- zookeeper-3.4:https://pan.baidu.com/s/1SpIMlWfKgnxd3pL1PIu5IQ 提取碼:0s3a
二、伺服器準備
本次環境配置共需要4台伺服器,伺服器之間互相可以Ping通,各個節點功能如下圖:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL3QjMwUzN0kTM1IzNwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
三、檢查四台伺服器時間
要保證伺服器之間的時間誤差保持在幾秒内,否則會造成某些角色程序不能正常啟動
date //檢視伺服器時間
date -s "2020-07-07 06:00:00" //設定伺服器時間
四、為各個伺服器分别設定别名
- 打開配置檔案
vi /etc/sysconfig/network //打開network檔案
- 增加配置,别名可以根據需要設定,此處僅為示例
- 分别增加IP别名映射
vi /etc/hosts //打開hosts檔案
- 增加映射配置 ,IP和别名之間的映射,要和network中的别名相對應
五、各個伺服器分别禁用SELinux
vi /etc/sysconfig/selinux //打開selinux檔案
- 将 SELINUX設定為disabled
六、各個伺服器分别關閉防火牆
systemctl stop firewalld.service //停止firewall
systemctl disable firewalld.service //禁止firewall開機啟動
七、分發秘鑰檔案
将NameNode(192.168.1.6、192.168.1.7)點公鑰分發給其他伺服器,實作NameNode(192.168.1.6、192.168.1.7)到其他角色伺服器的SSH免密登陸
- 生産NameNode(192.168.1.6/192.168.1.7)節點的秘鑰檔案
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa //生成秘鑰檔案
- 本地安裝
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys //本地安裝秘鑰
- 各個節點分别登陸一下本地,以生成本機的.ssh檔案目錄
ssh localhost
- 将NameNode(192.168.1.6)的公鑰分别發送到192.168.1.7、192.168.1.8、192.168.1.9
cd ~/.ssh/ //切換到公鑰所在目錄
scp id_dsa.pub 192.168.1.7:`pwd`/node606.pub //将公鑰發送到.7節點目前目錄,并重命名公鑰檔案,以便區分是哪個伺服器的公鑰檔案
- 192.168.1.7、192.168.1.8、192.168.1.9分别安裝接收到的公鑰檔案
cat ~/.ssh/node606.pub >> ~/.ssh/authorized_keys //安裝公鑰檔案
- 192.168.1.7和192.168.1.6操作步驟一樣,此處不再重複
八、NameNode(192.168.1.6)安裝JDK
- 将Java安裝檔案上傳到伺服器上。
- 将安裝檔案解壓縮,并記錄jdk解壓檔案根目錄
tar -zxvf 檔案名 解壓目錄 //解壓到目前目錄時,可以省略解壓目錄
- 配置JDK環境變量,打開配置檔案,在檔案末尾加入JDK配置,配置内容如截圖所示
vi /etc/profile
- 重新整理環境變量:輸入指令,之間重新整理
source /etc/profile
- 輸入 jps 指令,如果出現jdk程序資訊,說明JDK環境配置成功
- 通過scp指令将192.168.1.6)的JDK分别發送到192.168.1.7、192.168.1.8、192.168.1.9
九、192.168.1.6 安裝配置Hadoop
- 将Hadoop安裝檔案上傳到伺服器上
- 将Hadoop安裝檔案解壓,并記錄下Hadoop的根目錄
tar -zxvf 檔案名 解壓目錄 //解壓到目前目錄時,可以省略解壓目錄
- 配置Hadoop環境變量,在/etc/profile末尾加上對應的配置資訊
vi /etc/profile
- 配置Hadoop的Java環境變量:需要為Hadoop根目錄下,ect/hadoop/下的hadoop-env.sh、mapred-env.sh、yarn-env.sh三個檔案分别設定Java環境變量,将JAVA_HOME設定為我們安裝的Java根目錄
vi hadoop-env.sh
vi mapred-env.sh
vi yarn-env.sh
- 配置core-site.xml,檔案同樣在Hadoop根目錄下的ect/hadoop/目錄中,需要在檔案中,加入如下配置
vi core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value> //mycluster 在hdfs-site.xml中定義的叢集ID
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/hadoop/ha</value> //臨時存放目錄
</property>
<property>
<name>ha.zookeeper.quorum</name> //定義ZooKeeper節點
<value>192.168.1.7:2181,192.168.1.8:2181,192.168.1.9:2181</value>
</property>
- 配置hdfs-site.xml,檔案同樣在Hadoop根目錄下的ect/hadoop/目錄中
vi hdfs-site.xml
<property>
<name>dfs.replication</name> //備份數
<value>2</value>
</property>
<property>
<name>dfs.nameservices</name>
<value>mycluster</value> //叢集ID
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name> //nameNode ID
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name> //nameNode 節點 rpc 資訊
<value>192.168.1.6:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name> //nameNode 節點 rpc 資訊
<value>192.168.1.7:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name> //nameNode 節點 http 資訊
<value>192.168.1.6:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name> //nameNode 節點 http 資訊
<value>192.168.1.7:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name> //journalNode 主機資訊
<value>qjournal://192.168.1.6:8485;192.168.1.7:8485;192.168.1.8: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.journalnode.edits.dir</name> //journalNode 存放目錄
<value>/var/hadoop/ha/jn</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name> //高可用驗證方式
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name> //ssh私鑰
<value>/root/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name> //設定為自動切換NameNode
<value>true</value>
</property>
- 配置slaves檔案:将DataNode各節點IP寫入檔案中
vi slaves
十、将JDK和Hadoop、/etc/profile檔案分發到其他伺服器上
scp -r /usr/java/jdk1.8.0_172 192.168.1.7:/usr/java/ //要保證發送、接收目錄存在
scp -r /usr/Hadoop/hadoop-2.7.3 192.168.1.7:/usr/Hadoop/ //要保證發送、接收目錄存在
scp /etc/profile 192.168.1.7:/etc/profile //發送環境變量檔案
source /etc/profile //重新整理環境變量資訊
十一、安裝配置Zookeeper
- 将Zookeeper安裝檔案上傳到 192.168.1.7 上。
- 将安裝檔案解壓縮,并記錄Zookeeper解壓檔案根目錄
tar -zxvf 檔案名 解壓目錄 //解壓到目前目錄時,可以省略解壓目錄
- 進入zookeeper安裝目錄,進入conf檔案夾,将zoo_sample.cfg重命名zoo.cfg
- 寫入配置資訊,修改資料存儲位置,并寫入zookeeper節點資訊:節點資訊中,需要為每一台參與到zookeeper叢集中的節點指定編号,編号必須為數字;
- 通過scpm指令,将zookeeper分發到191.168.1.8和191.168.1.9中;
- 在192.168.1.7、192.168.1.8、192.168.1.9中,分别建立zookeeper的配置檔案中,資料存放檔案夾
mkdir -p /var/zookeeper
- 在192.168.1.7、192.168.1.8、192.168.1.9 的資料目錄下,分别建立myid檔案,并寫入配置檔案中的編号,以标記該節點,需要注意的是,寫入的數字,是配置檔案中,節點的編号
echo 1 > /var/zookeeper/myid // 1 是192.167.1.7 在zookeeper配置檔案中的編号
- 配置JDK環境變量(192.168.1.7、192.168.1.8、192.168.1.9 都需要加上zookeeper環境變量配置),打開配置檔案,在檔案末尾加入JDK配置,配置内容如截圖所示
vi /etc/profile
- 重新整理環境變量:輸入指令,直接重新整理
source /etc/profile
十二、啟動叢集
- 啟動zookeeper叢集:在192.168.1.7、192.168.1.8、192.168.1.9中分别執行啟動指令,啟動zookeeper叢集
zkServer.sh start
- 啟動journalNode:在192.168.1.6、192.168.1.7、192.168.1.8中分别執行啟動指令
hadoop-daemon.sh start journalnode
- 格式化hdfs:192.168.1.6(配置檔案中的nameNode)節點上格式化,出現successfully表示格式化成功(每個Hadoop隻需在第一次進行格式化)。
hdfs namenode -format
- 啟動格式化過的nameNode(192.168.1.6)節點
hadoop-daemon.sh start namenode
- 将初始化的nameNode中繼資料資訊,拷貝到另外一個nameNode節點,在192.168.1.7中,執行該指令
hdfs namenode -bootstrapStandby
- 在zookeeper上,注冊hdfs資訊,在192.168.1.6節點上,執行下方指令
hdfs zkfc -formatZK
- 啟動叢集:在192.168.1.6執行Hadoop啟動指令。
start-dfs.sh
- 通路Hadoop:通路位址是 你的NameNodeIP:50070,出現這個頁面,代表整個配置完成,如果出錯,Hadoop會在根目錄的log目錄下生産日志檔案,不同節點的日志,會存放在對應伺服器上,可以根據日志,調整配置。
十三、後期使用啟動順序
高可用環境,在首次啟動時,因為需要初始化各方功能,是以過程較為複雜,後續使用過程中,啟動就更簡單,具體步驟如下:
- 啟動 Zookeeper(僅需在其中一個NameNode節點啟動即可)
zkServer.sh start
- 啟動Hadoop(僅需在其中一個NameNode節點啟動即可)
start-dfs.sh