最近研究了下公司的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