1. 程式人生 > >HDFS高可用完全分散式搭建步驟

HDFS高可用完全分散式搭建步驟

一、準備階段

  • 分散式思想

HA分散式思想

  • 分散式叢集規劃

主機名 IP地址 NN-1 NN-2 DN ZK ZKFC JNN
Hadoop1 192.168.23.133
Hadoop2 192.168.23.130
Hadoop3 192.168.23.132
Hadoop4 192.168.23.131

二、操作步驟

1、搭建zookeeper叢集

(1)先在節點2上解壓zookeeper-3.4.10.tar.gz
(2)修改conf目錄下的zoo_sample.cfg的名稱,改為zoo.cfg

mv zoo_sample.cfg zoo.cfg

(3)在2、3、4節點上建立/var/hpe/zookeeper,修改zoo.cfg

dataDir=/var/hpe/zookeeper
server.1=Hadoop2:2888:3888
server.2=Hadoop3:2888:3888
server.3=Hadoop4:2888:3888

(4)在dataDir目錄下建立一個myid檔案,在這個檔案中寫上當前節點ID號
(5)將配置好的zookeeper安裝包傳送到Hadoop3 Hadoop4
(6)傳送完畢後,在各自節點上建立myid號,ID號要依次遞增

2、搭建HA完全分散式

(1)檢視每個節點的防火牆狀態,若防火牆服務啟動,則關閉防火牆服務

service iptables status	  				   //檢視防火牆狀態
iptables: Firewall is not running.         //說明沒有開啟
service iptables stop      			       //關閉防火牆服務。
chkconfig iptables off                     //禁止防火牆開機自啟。

(2)在每個節點上執行以下命令,用來存放所需檔案

mkdir -p /hpe/hadoop

(3)解壓Hadoop-2.4.5.gz、jdk.gz、zookeeper-3.4.10.tar.gz

tar -zxvf Hadoop-2.4.5.gz
tar -zxvf jdk.gz
tar -zxvf zookeeper-3.4.10.tar.gz 

(4)分別配置四臺節點的Hadoop環境變數和jdk
輸入 vim ~/.bashrc在檔案中新增如下程式碼:

//配置Hadoop環境變數
export HADOOP_HOME=/hpe/hadoop/Hadoop-2.6.5
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

//配置JDK環境變數
export JAVA_HOME=/hpe/hadoop/jdk1.8.0_151
export PATH=$PATH:$JAVA_HOME/bin

(5)為了不產生資料延遲首先使4個節點的時間同步
①各個節點安裝ntp :

yum install ntp

②安裝完成後每個節點都執行如下命令從而達到時間同步

/*ntp1.aliyun.com為阿里的時間伺服器*/
ntpdate ntp1.aliyun.com

(6)配置hosts檔案

vi /etc/hosts

// 實現主機名對映
192.168.23.133Hadoop1
192.168.23.130Hadoop2
192.168.23.132Hadoop3
192.168.23.131Hadoop4

(7)配置免密登入

Hadoop1->Hadoop1、Hadoop1->Hadoop2、Hadoop1->Hadoop3 Hadoop1->Hadoop4、Hadoop2->Hadoop1(主備切換)
①在所有節點執行以下命令

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

②在Hadoop1節點執行以下命令,將Hadoop1的公鑰加入到其他節點的白名單中

ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

③在Hadoop2節點執行以下命令,將Hadoop2的公鑰加入到Hadoop1節點的白名單中

ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

④驗證免密是否成功ssh Hadoop2
(8)修改hdfs-site.xml配置檔案

<property>
  <name>dfs.nameservices</name>
  <value>mycluster</value>
</property>
<property>
  <name>dfs.ha.namenodes.mycluster</name>
  <value>nn1,nn2</value>
</property>
<property>
  <name>dfs.namenode.rpc-address.mycluster.nn1</name>
  <value>Hadoop1:8020</value>
</property>
<property>
  <name>dfs.namenode.rpc-address.mycluster.nn2</name>
  <value> Hadoop2:8020</value>
</property>
<property>
  <name>dfs.namenode.http-address.mycluster.nn1</name>
  <value> Hadoop1:50070</value>
</property>
<property>
  <name>dfs.namenode.http-address.mycluster.nn2</name>
  <value> Hadoop2:50070</value>
</property>
<property>
  <name>dfs.namenode.shared.edits.dir</name>
  <value>qjournal://Hadoop1:8485; Hadoop2:8485; Hadoop3:8485/mycluster</value>
</property>
<property>
  <name>dfs.journalnode.edits.dir</name>
  <value>/var/sxt/hadoop/ha/jn</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</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>

(9)修改core-site.xml配置檔案

<property>
   <name>fs.defaultFS</name>
   <value>hdfs://mycluster</value>
</property>
<property>
   <name>ha.zookeeper.quorum</name>
   <value>Hadoop2:2181,Hadoop3:2181,Hadoop4:2181</value> //設定zookeeper啟動的節點位置
</property>

(10)修改slaves配置檔案

Hadoop2
Hadoop3
Hadoop4

(11)在Hadoop1節點上將配置好的HDFS安裝包傳送到Hadoop2 Hadoop3 Hadoop4

scp -r hadoop-2.6.5 [email protected]:/opt/software/hadoop/
scp -r hadoop-2.6.5 [email protected]:/opt/software/hadoop/
scp -r hadoop-2.6.5 [email protected]:/opt/software/hadoop/

(12)格式化NameNode(建立目錄以及檔案)

  • ①在Hadoop1、Hadoop2、Hadoop3分別執行如下命令
1)	hadoop-daemon.sh start journalnode			 //啟動JNN

- ②隨機選擇一臺NameNode執行

1)	hdfs namenode -format
2)	hadoop-daemon.sh start namenode

- ③另外一臺NameNode節點執行

1)	hdfs namenode  -bootstrapStandby

(13)在Hadoop1和Hadoop2上分別執行以下命令,格式化zookeeper

hdfs zkfc -formatZK

(14)關閉所有節點上的程序

stop-dfs.sh

(15)啟動HDFSstart-dfs.sh
(16)在每臺節點上檢視程序
Hadoop1上啟動的程序
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
說明每個程序在節點上啟動成功。
若介面如下圖所示,則證明HA分散式搭建成功
在這裡插入圖片描述在這裡插入圖片描述
在這裡插入圖片描述

三、搭建過程中遇見的錯誤

(1)在搭建完全分散式的時候,防火牆狀態是臨時關閉的,所以系統重啟後,防火牆狀態又重新開啟,導致叢集內通訊出現問題。
(2)slaves檔案忘記配置。
(3)由於多次格式化的時候選擇覆蓋,出現clusterId不一致的問題,導致部分DataNode節點無法正常啟動。檢視clusterId後,修改為一致,即可解決。
(4)zookeeper叢集沒最先啟動便在節點一二上執行hdfs zkfc -formatZK,導致報錯。