Hadoop HA高可用集羣搭建及常見問題處理

最近研究了下公司的hadoop集羣並模仿搭建了一個在本地測試使用的hadoop集羣。本文介紹下詳細的搭建過程以及各種常見問題的處理解決。

 1 ,  前期準備

1.1  ,  準備Linux環境,配置虛擬機網絡環境,修改虛擬機IP地址(最好使用第一種配置,簡單且不容易出錯)

        注意,修改之前建議使用 root 管理員權限登陸,這樣會避免特別多問題,等集羣搭建好之後在用普通用戶登陸。

        7 臺虛擬機ip地址最好整個連號,比如我本地是 192.168.2.201 到 192.168.2.207

1.2  修改主機名和ip的映射關係

vi /etc/hosts

           

關閉防火牆 service iptables stop  
關閉開機自啓 chkconfig iptables off
重啓虛擬機  reboot 

參考https://blog.csdn.net/qq_25838777/article/details/80732854

 

2 ,  集羣規劃

主機名 IP 安裝的軟件 運行的進程

weekend01 192.168.2.201     jdk hadoop NameNode、DFSZKFailoverController(zkfc)
weekend02 192.168.2.202     jdk hadoop NameNode、DFSZKFailoverController(zkfc)
weekend03 192.168.2.203     jdk hadoop ResourceManager
weekend04 192.168.2.204     jdk hadoop ResourceManager
weekend05 192.168.2.205     jdk hadoop zookeeperDataNode、NodeManager、JournalNode、QuorumPeerMain
weekend06 192.168.2.206     jdk hadoop zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain
weekend07 192.168.2.207     jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain

 

3 ,  安裝集羣所需要的各個軟件

  3.1 安裝JDK (在第weekend01上安裝)

        上傳jdk壓縮包,我用的是jdk7 ,

        創建文件夾 mkdir /usr/app

        解壓 tar -zxvf jdk-7u55-linux-i586.tar.gz -C /usr/app

       添加環境變量 vi /etc/profile

        在文件最後添加
export JAVA_HOME=/usr/app/jdk-7u_65-i585

export PATH=$PATH:$JAVA_HOME/bin

        刷新配置 source /etc/profile

    3.2 安裝配置 zookeeper (在第weekend05上安裝)

上傳zookeeper壓縮包並解壓到 /usr/app文件夾下

修改配置
cd /usr/app/zookeeper-3.4.5/conf/
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
修改:dataDir=/usr/app/zookeeper-3.4.5/tmp
在最後添加:
server.1=weekend05:2888:3888
server.2=weekend06:2888:3888
server.3=weekend07:2888:3888
保存退出
創建一個tmp文件夾
mkdir /usr/app/zookeeper-3.4.5/tmp
再創建一個空文件
touch /usr/app/zookeeper-3.4.5/tmp/myid
最後向該文件寫入ID

echo 1 > /usr/app/zookeeper-3.4.5/tmp/myid

    配置好的zookeeper拷貝到其他節點(首先分別在weekend06、weekend07根目錄下創建一個目錄:mkdir /usr/app)
scp -r /usr/app/zookeeper-3.4.5/ weekend06:/usr/app/
scp -r /usr/app/zookeeper-3.4.5/ weekend07:/usr/app/
注意:修改weekend06、weekend07對應/usr/app/zookeeper-3.4.5/tmp/myid內容
weekend06:
echo 2 > /usr/app/zookeeper-3.4.5/tmp/myid
        weekend07:
echo 3 > /usr/app/zookeeper-3.4.5/tmp/myid

 

  3.3 安裝hadoop (在第weekend01上安裝)

        上傳hadoop壓縮包,我用的是2.4版本    

        同樣解壓到 /usr/app文件夾下面        將hadoop添加到環境變量中
vi /etc/profile

export JAVA_HOME=/usr/app/jdk-7u_65-i585
export HADOOP_HOME=/usr/app/hadoop-2.4.1
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin

        配置修改 /usr/app/hadoop-2.4.1/etc/hadoop 路徑下如下5個文件

        hadoo-env.sh ,core-site.xml,hdfs-site.xml,mapred-site.xml,yarn-site.xml

        點擊此處跳轉至詳細配置文檔https://blog.csdn.net/qq_25838777/article/details/80734916

注意:core-site中指定hdfs的nameservice名稱(fs.defaultFS)可以隨意命名,但是必須與hdfs-site中的(dfs.nameservices)保持一致

 3.4 修改slaves

(slaves是指定子節點的位置,因爲要在weekend01上啓動HDFS、在weekend03啓動yarn,所以weekend01上的slaves文件指定的是datanode的位置,weekend03上的slaves文件指定的是nodemanager的位置)

分別修改 weekend01 和 weekend03上的配置文件

  vi  /usr/app/hadoop-2.4.1/etc/hadoop

    將slavles中信息改爲如下所示

[root@weekend01 hadoop]#cat slaves
weekend05
weekend06
weekend07

 

 3.5 配置免密碼登陸

(點擊此處跳轉詳細配置方法文檔https://blog.csdn.net/qq_25838777/article/details/80653481

配置weekend01到weekend02、weekend03、weekend04、weekend05、weekend06、weekend07的免密碼登陸

配置weekend03到weekend04、weekend05、weekend06、weekend07的免密碼登陸

兩個namenode之間要配置ssh免密碼登陸,別忘了配置weekend02到weekend01的免登陸

 

3.6 將配置好的hadoop及zookeeper拷貝到其他節點

在weekend01上執行 如下 : 

scp -r /usr/app/hadoop-2.4.1/ weekend01:/usr/app
scp -r /usr/app/hadoop-2.4.1/ weekend02:/usr/app
........
scp -r /usr/app/hadoop-2.4.1/ weekend07:/usr/app

在weekend05上執行如下 :

scp -r /usr/app/zookeeper-3.4.5/ weekend06:/usr/app

scp -r /usr/app/zookeeper-3.4.5/ weekend07:/usr/app

按照下面的步驟啓動集羣


3.7 啓動zookeeper集羣

(分別在weekend05、weekend06、weekend07上啓動zk)
cd /usr/app/zookeeper-3.4.5/bin/
./zkServer.sh start
#查看狀態:一個leader,兩個follower
./zkServer.sh status


3.8啓動journalnode

(分別在在weekend05、weekend06、weekend07上執行)最下方有關係圖解

注: journalnode爲qjournal分佈式應用(可用來管理)的管理edit.log文件,依賴於zk管理,所以將三個node節點放到zk上啓動。hadoop1.x中還是用secondynode管理edit.log文件,而hadoop2.x使用qjournal管理edit.log文件。
cd /usr/app/hadoop-2.4.1
sbin/hadoop-daemon.sh start journalnode
#運行jps命令檢驗,weekend05、weekend06、weekend07上多了JournalNode進程


3.9格式化HDFS(僅第一次啓動執行)

#在weekend01上執行命令:
hdfs namenode -format
#格式化後會在根據core-site.xml中的hadoop.tmp.dir配置生成個文件,這裏我配置的是/weekend/hadoop-2.4.1/tmp,然後將/usr/app/hadoop-2.4.1/tmp拷貝到weekend02的/usr/app/hadoop-2.4.1/下。
scp -r tmp/ weekend02:/usr/app/hadoop-2.4.1/
##也可以這樣,建議hdfs namenode -bootstrapStandby


3.10格式化ZKFC(在weekend01上執行即可)(僅第一次啓動執行)

注:zkfc是用來管理兩臺namenode切換狀態的進程。同樣是依賴zk實現。當active namenode狀態不正常了,該namenode上的zkfc會制一個狀態發動到 zk上,standby namenode上的zkfc會查看到該不正常狀態,並向active namenode通過ssh發送一條指令,kill -9 進程號,殺死該進程,並將自己重置成active,放置active假死發生腦裂事件,萬一ssh發送失敗,也可以啓動自定義的.sh腳本文件,強制殺死active namenode進程。

在hadoop2.x中將這也的一對namenode管理關係叫做 federation(聯邦)最下方有圖解。

並且支持多個federation,  比如配置文件中起名爲ns1, 則該ns1中包括 (active namenode)nn1, (standby namenode)nn2 。
hdfs zkfc -formatZK


3.12啓動HDFS(在weekend01上執行)

sbin/start-dfs.sh


3.13 啓動YARN

(在weekend03上執行start-yarn.sh,把namenode和resourcemanager分開是因爲性能問題,因爲他們都要佔用大量資源,所以把他們分開了,他們分開了就要分別在不同的機器上啓動)

sbin/start-yarn.sh

weekend04上面的resourcemanager 需要自己手動去啓動下,

yarn-daemon.sh start resourcemanager

到這裏hadoop HA集羣配置完畢,查看各個集羣節點上的進程驗證是否成功啓動

搭建成功情況下 weekend01 , weekend02 含有的進程:NameNode,DFSZKFailoverController

weekend03 , weekend04 含有的進程:ResourceManager

weekend05 , weekend06,weekend07 含有的進程:NodeManager,DataNode,JournalNode,QuorumPeerMain

可以在網頁查看各個服務運行狀態 : 

HDFS  :  http://weekend01:50070    

ResourceManager :  http://weekend03:8088

下圖爲常見默認端口號: 

附 : 配置虛擬機網絡環境配置分析

首先vmware 會產生一個虛擬網關,同時vmware 上面的虛擬機上面也有網關。

而我們的實際windows上有一塊實際的網關,同事vmware 也會給我們windows生成一個虛擬網卡,快捷鍵 win + R 可以看到該網卡,名字叫做 VMware NetWork Adapter VMnet8 ,這個網卡當然就會與vmware 進行連接。 這樣的話通過 vmware軟件,就把你的centos虛擬機和本地windows主機組成一個虛擬的網絡。 

這樣 vmware虛擬網關爲 192.168.2.1 的話,那麼centos虛擬機網關爲192.168.2.1,網卡ip可以配置爲 192.168.2.100(1-->255),而本地vmnet8 虛擬機網關同樣爲192.168.2.1,網卡ip可以配置爲 192.168.2.101(1--255),保證兩個網卡不衝突並且在同一個網段即可。


原文:https://blog.csdn.net/qq_25838777/article/details/80732854 
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章