在Hadoop2.x之后的版本,提出了解決單點問題的方案--HA(High Available 高可用)。這篇博客闡述如何搭建高可用的HDFS和YARN,執(zhí)行步驟如下:
下面我們給出下載包的鏈接地址:
注:若JDK無法下載,請到Oracle的官網(wǎng)下載JDK。
到這里安裝包都準備好了,接下來我們開始搭建與配置。
- useradd hadoop
- passwd hadoop
然后根據(jù)提示,設(shè)置密碼。接著我給hadoop用戶設(shè)置面免密碼權(quán)限,也可自行添加其他權(quán)限。
- chmod +w /etc/sudoers
- hadoop ALL=(root)NOPASSWD:ALL
- chmod -w /etc/sudoers
將下載好的安裝包解壓到 /usr/java/jdk1.7,然后設(shè)置環(huán)境變量,命令如下:
- sudo vi /etc/profile
然后編輯配置,內(nèi)容如下:
- export JAVA_HOME=/usr/java/jdk1.7
- export PATH=$PATH:$JAVA_HOME/bin
然后使環(huán)境變量立即生效,命令如下:
- source /etc/profile
然后驗證JDK是否配置成功,命令如下:
- java -version
若顯示對應(yīng)版本號,即表示JDK配置成功。否則,配置無效!
集群中所有機器的hosts配置要要相同(推薦)??梢员苊獠槐匾穆闊?,用域名取代IP,方便配置。配置信息如下:
- 10.211.55.12 nna # NameNode Active
- 10.211.55.13 nns # NameNode Standby
- 10.211.55.14 dn1 # DataNode1
- 10.211.55.15 dn2 # DataNode2
- 10.211.55.16 dn3 # DataNode3
然后用scp命令,將hosts配置分發(fā)到各個節(jié)點。命令如下:
- # 這里以NNS節(jié)點為例子
- scp /etc/hosts hadoop@nns:/etc/
輸入如下命令:
- ssh-keygen –t rsa
然后一路按回車鍵,最后在將id_rsa.pub寫到authorized_keys,命令如下:
- cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
在hadoop用戶下,需要給authorized_keys賦予600的權(quán)限,不然免密碼登陸無效。在其他節(jié)點只需要使用 ssh-keygen –t rsa 命令,生產(chǎn)對應(yīng)的公鑰,然后將各個節(jié)點的id_rsa.pub追加到nna節(jié)點的authorized_keys中。最后,將nna節(jié)點下的authorized_keys文件通過scp命令,分發(fā)到各個節(jié)點的 ~/.ssh/ 目錄下。目錄如下:
- # 這里以NNS節(jié)點為例子
- scp ~/.ssh/authorized_keys hadoop@nns:~/.ssh/
然后使用ssh命令相互登錄,看是否實現(xiàn)了免密碼登錄,登錄命令如下:
- # 這里以nns節(jié)點為例子
- ssh nns
若登錄過程中木有提示需要輸入密碼,即表示密碼配置成功。
由于hadoop的節(jié)點之間需要通信(RPC機制),這樣一來就需要監(jiān)聽對應(yīng)的端口,這里我就直接將防火墻關(guān)閉了,命令如下:
- chkconfig iptables off
注:如果用于生產(chǎn)環(huán)境,直接關(guān)閉防火墻是存在安全隱患的,我們可以通過配置防火墻的過濾規(guī)則,即將hadoop需要監(jiān)聽的那些端口配置到防火墻接受規(guī)則中。關(guān)于防火墻的規(guī)則配置參見“l(fā)inux防火墻配置”,或者通知公司的運維去幫忙配置管理。
同時,也需要關(guān)閉SELinux,可修改 /etc/selinux/config 文件,將其中的 SELINUX=enforcing 改為 SELINUX=disabled即可。
各個節(jié)點的時間如果不同步,會出現(xiàn)啟動異常,或其他原因。這里將時間統(tǒng)一設(shè)置為Shanghai時區(qū)。命令如下:
- # cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
- cp: overwrite `/etc/localtime'? yes
- 修改為中國的東八區(qū)
- # vi /etc/sysconfig/clock
- ZONE="Asia/Shanghai"
- UTC=false
- ARC=false
將下載好的安裝包,解壓到指定位置,這里為直接解壓到當前位置,命令如下:
- tar -zxvf zk-{version}.tar.gz
修改zk配置,將zk安裝目錄下conf/zoo_sample.cfg重命名zoo.cfg,修改其中的內(nèi)容:
- # The number of milliseconds of each tick
- # 服務(wù)器與客戶端之間交互的基本時間單元(ms)
- tickTime=2000
- # The number of ticks that the initial
- # synchronization phase can take
- # zookeeper所能接受的客戶端數(shù)量
- initLimit=10
- # The number of ticks that can pass between
- # sending a request and getting an acknowledgement
- # 服務(wù)器和客戶端之間請求和應(yīng)答之間的時間間隔
- syncLimit=5
- # the directory where the snapshot is stored.
- # do not use /tmp for storage, /tmp here is just
- # example sakes.
- # 保存zookeeper數(shù)據(jù),日志的路徑
- dataDir=/home/hadoop/data/zookeeper
- # the port at which the clients will connect
- # 客戶端與zookeeper相互交互的端口
- clientPort=2181
- server.1= dn1:2888:3888
- server.2= dn2:2888:3888
- server.3= dn3:2888:3888
- #server.A=B:C:D
#其中A是一個數(shù)字,代表這是第幾號服務(wù)器;B是服務(wù)器的IP地址;
#C表示服務(wù)器與群集中的“領(lǐng)導(dǎo)者”交換信息的端口;當領(lǐng)導(dǎo)者失效后,D表示用來執(zhí)行選舉時服務(wù)器相互通信的端口。
接下來,在配置的dataDir目錄下創(chuàng)建一個myid文件,里面寫入一個0-255之間的一個隨意數(shù)字,每個zk上這個文件的數(shù)字要是不一樣的,這些數(shù)字應(yīng)該是從1開始,依次寫每個服務(wù)器。文件中序號要與dn節(jié)點下的zk配置序號一直,如:server.1=dn1:2888:3888,那么dn1節(jié)點下的myid配置文件應(yīng)該寫上1。
分別在各個dn節(jié)點啟動zk進程,命令如下:
- bin/zkServer.sh start
然后,在各個節(jié)點輸入jps命令,會出現(xiàn)如下進程:
- QuorumPeerMain
上面說的輸入jps命令,若顯示對應(yīng)的進程,即表示啟動成功,同樣我們也可以輸入zk的狀態(tài)命令查看,命令如下:
- bin/zkServer.sh status
會出現(xiàn)一個leader和兩個follower。
HDFS配置HA的結(jié)構(gòu)圖如下所示:
上圖大致架構(gòu)包括:
1. 利用共享存儲來在兩個NN間同步edits信息。以前的HDFS是share nothing but NN,現(xiàn)在NN又share storage,這樣其實是轉(zhuǎn)移了單點故障的位置,但中高端的存儲設(shè)備內(nèi)部都有各種RAID以及冗余硬件,包括電源以及網(wǎng)卡等,比服務(wù)器的可靠性還是略有 提高。通過NN內(nèi)部每次元數(shù)據(jù)變動后的flush操作,加上NFS的close-to-open,數(shù)據(jù)的一致性得到了保證。
2. DN同時向兩個NN匯報塊信息。這是讓Standby NN保持集群的最新狀態(tài)的必須步驟。
3. 用于監(jiān)視和控制NN進程的FailoverController進程。顯然,我們不能在NN進程內(nèi)部進行心跳等信息同步,最簡單的原因,一次FullGC 就可以讓NN掛起十幾分鐘,所以,必須要有一個獨立的短小精悍的watchdog來專門負責監(jiān)控。這也是一個松耦合的設(shè)計,便于擴展或更改,目前版本里是 用ZooKeeper(簡稱ZK)來做同步鎖,但用戶可以方便的把這個Zookeeper FailoverController(簡稱ZKFC)替換為其他的HA方案或leader選舉方案。
4. 隔離(Fencing),防止腦裂,就是保證在任何時候只有一個主NN,包括三個方面:
共享存儲fencing,確保只有一個NN可以寫入edits。
客戶端fencing,確保只有一個NN可以響應(yīng)客戶端的請求。
DN fencing,確保只有一個NN向DN下發(fā)命令,譬如刪除塊,復(fù)制塊等等。
名稱 | Host | 職責 |
NNA | 10.211.55.12 | zkfc |
NNS | 10.211.55.13 | zkfc |
DN1 | 10.211.55.14 | zookeeper |
DN2 | 10.211.55.15 | zookeeper |
DN3 | 10.211.55.16 | zookeeper |
這里列出了所有的配置,后面配置其他組件,可以參考這里的配置。 配置完成后,輸入:. /etc/profile(或source /etc/profile)使之立即生效。嚴重是否環(huán)境變量配置成功與否,輸入:echo $HADOOP_HOME,若輸出對應(yīng)的配置路徑,即可認定配置成功。
注:hadoop2.x以后的版本conf文件夾改為etc文件夾了
配置內(nèi)容如下所示:
- export JAVA_HOME=/usr/java/jdk1.7
- export HADOOP_HOME=/home/hadoop/hadoop-2.6.0
- export ZK_HOME=/home/hadoop/zookeeper-3.4.6
- export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOM
原文:http://www.cnblogs.com/smartloli/p/4298430.html 作者: 哥不是小蘿莉
本文為轉(zhuǎn)載,如需再次轉(zhuǎn)載,請查看源站 “cnblogs.com” 的要求。如果我們的工作有侵犯到您的權(quán)益,請及時聯(lián)系我們。
文章僅代表作者的知識和看法,如有不同觀點,請樓下排隊吐槽 :D
聯(lián)系客服