HA集群搭建

Hadoop

HA集群搭建文檔.................................................................................................. 2

1鞍匾、 概述................................................................................................................... 2

1.1 安裝環(huán)境...................................................................................................... 2

1.2 高可用(HA)hadoop集群介紹..................................................................... 2

1.3 集群規(guī)劃...................................................................................................... 3

2案怯、Hadoop集群搭建.................................................................................................. 4

2.1 集群基礎環(huán)境配置........................................................................................ 5

2.2 集群搭建.................................................................................................... 12


Hadoop

HA集群搭建文檔


詳細記錄在本地Vmware虛擬機中搭建五節(jié)點的Hadoop HA集群過程

[if !supportLists]1改览、[endif]概述

1.1 安裝環(huán)境

本機系統(tǒng):win10 16GB內(nèi)存

虛擬機系統(tǒng):CentOS6.8 64位

虛擬機軟件:VMWare14.1.1

JDK版本:JDK1.8.0.92

Hadoop版本:2.6.5

Zookeeper版本:3.4.10


1.2 高可用(HA)hadoop集群介紹

1)HDFS高可用


在 Hadoop 2.0之前,在HDFS 集群中NameNode 存在單點故障 (SPOF:A Single Point of Failure)。對于只有一個 NameNode 的集群虐拓,如果NameNode 機器出現(xiàn)故障(比如宕機或是軟件、硬件升級),那么整個集群將無法使用碍拆,直到 NameNode 重新啟動。HDFS 的 HA 功能通過配置 Active/Standby 兩個 NameNodes 實現(xiàn)在集群中對 NameNode 的熱備來解決上述問題慨蓝。如果出現(xiàn)故障感混,如機器崩潰或機器需要升級維護,這時可通過此種方式將 NameNode 很快的切換到另外一臺機器礼烈。????


在一個典型的 HDFS(HA) 集群中弧满,使用兩臺單獨的機器配置為 NameNodes 。在任何時間點此熬,確保 NameNodes 中只有一個處于 Active 狀態(tài)庭呜,其他的處在 Standby 狀態(tài)。其中ActiveNameNode 負責集群中的所有客戶端操作犀忱,StandbyNameNode 僅僅充當備機募谎,保證一旦 ActiveNameNode 出現(xiàn)問題能夠快速切換。為了能夠?qū)崟r同步 Active 和 Standby 兩個NameNode 的元數(shù)據(jù)信息(實際上 editlog)阴汇,需提供一個共享存儲系統(tǒng)数冬,可以是 NFS、QJM(Quorum Journal Manager)或者 Zookeeper鲫寄,Active Namenode 將數(shù)據(jù)寫入共享存儲系統(tǒng)吉执,而 Standby 監(jiān)聽該系統(tǒng),一旦發(fā)現(xiàn)有新數(shù)據(jù)寫入地来,則讀取這些數(shù)據(jù)戳玫,并加載到自己內(nèi)存中,以保證自己內(nèi)存狀態(tài)與 Active NameNode 保持基本一致未斑,如此這般咕宿,在緊急情況下 standby 便可快速切為 active namenode。HDFS NameNode 的高可用整體架構(gòu)如下圖所示:[if !vml]

[endif]

2)YARN高可用


對于ResourceManger也存在單點故障問題蜡秽,ResourceManager(RM)負責跟蹤群集中的資源府阀,并調(diào)度應用程序(例如MapReduce作業(yè))。在Hadoop 2.4之前芽突,ResourceManager是YARN集群中的單點故障试浙。高可用性功能以活動/待機資源管理器對的形式添加冗余,以消除此單一故障點寞蚌。

ResourceManger高可用架構(gòu)圖如下:

[if !vml]

[endif]



1.3 集群規(guī)劃

這里是一個五節(jié)點的Hadoop HA集群田巴,集群規(guī)劃如下:


節(jié)點(IP)角色

Hadoop01(192.168.1.11)namenode,datanode,nodemanager,zookeeper, journalnode

Hadoop02(192.168.1.12)secondaryNamenode,datanode,nodemanager,zookeeper, journalnode

Hadoop03(192.168.1.13)datanode,nodemanager,zookeeper, journalnode

Hadoop04(192.168.1.14)datanode,nodemanager,zookeeper, resourcemanager, journalnode

Hadoop05(192.168.1.15)datanode,nodemanager,zookeeper, resourcemanager, journalnode



2钠糊、Hadoop集群搭建

注意:沒特殊說明,都是使用hadoop用戶進行操作壹哺,需要使用root用戶進行操作的時候抄伍,會特別指出;


首先做一下說明管宵,統(tǒng)一將軟件安裝到/app目錄下截珍,方便管理,安裝軟件的時候箩朴,需要切換到普通hadoop用戶岗喉;


切換到root用戶,在根目錄下創(chuàng)建一個/app目錄隧饼,并修改權(quán)限:

[if !vml]

[endif]


2.1 集群基礎環(huán)境配置

2.1.1 添加hadoop用戶

如果hadoop01~hadoop05節(jié)點沒有hadoop用戶沈堡,請創(chuàng)建一個hadoop用戶;

2.1.2 防火墻配置

在這里直接關(guān)閉了防火墻和SELINUX燕雁,實際生產(chǎn)環(huán)境中不能直接關(guān)閉诞丽,需要添加修改防火墻規(guī)則;

2.1.3 網(wǎng)絡設置

在進行以下操作的前提是:五臺節(jié)點之間的網(wǎng)絡互通拐格,參考:“海工所_VMWware安裝虛擬機文檔_大數(shù)據(jù)_鄭智”文檔中的網(wǎng)絡配置部分僧免;

2.1.4 SSH免密登錄配置(重難點)


1)為什么需要配置SSH免密?


在集群中捏浊,Hadoop控制腳本依賴SSH來執(zhí)行針對整個集群的操作懂衩。例如,某個腳本能夠終止并重啟集群中的所有守護進程金踪。所以浊洞,需要安裝2 SSH琴锭,但是悼沈,SSH遠程登陸的時候西饵,需要密碼驗證甘凭,集群中數(shù)千臺計算機,數(shù)千臺計算機都需要手工輸入密碼撇吞,這是不太現(xiàn)實的斋否,所以枫耳,就需要配置SSH無密碼登錄怨咪。


例如屋剑,如果主機上安裝了ssh服務,但是沒有做任何配置诗眨,也可以使用ssh登錄到遠程主機唉匾,但是需要輸入密碼,如下所示:

[if !vml]

[endif]

即使ssh 本機匠楚,也需要輸入密碼肄鸽;


2)SSH免密登錄原理


客戶機用戶擁有自己的一對公鑰私鑰對卫病,它將公鑰分發(fā)給需要遠程登錄的主機上,然后在客戶機需要ssh登錄遠程主機時典徘,客戶機會發(fā)送一個請求給遠程主機,遠程主機用客戶機的公鑰加密一段信息益咬,然后發(fā)送給客戶機逮诲,客戶機使用私鑰進行解密后,將原始的信息再發(fā)送給遠程主機幽告,遠程主機經(jīng)過驗證后梅鹦,來判斷這個客戶機的身份;



現(xiàn)在配置五臺節(jié)點之間冗锁,hadoop用戶的免密SSH登錄齐唆;


3)生成公鑰密鑰對


下面,以節(jié)點hadoop01為例冻河,介紹下如下在hadoop用戶下生成rsa公鑰密鑰對


首先箍邮,切換到hadoop用戶,運行命令:ssh-keygen -t rsa #(生成的是rsa類型的密鑰)叨叙,出現(xiàn)需要輸入的地方锭弊,直接按“Enter”鍵;


[if !vml]

[endif]


運行完成后看擂错,會在hadoop用戶目錄的.ssh目錄下生成一個公鑰文件和私鑰文件味滞,id_rsa為私鑰文件,id_rsa.pub為公鑰文件,如下圖:


[if !vml]

[endif]


分別在其他四個節(jié)點上執(zhí)行相同的操作钮呀,生成公鑰私鑰對剑鞍;


4)傳送公鑰文件到遠程主機


然后,以節(jié)點hadoop01作為客戶機爽醋,hadoop01蚁署、hadoop02、hadoop03子房、hadoop04形用、hadoop05作為需要遠程登錄的主機,介紹如何實現(xiàn)從客戶機上免密ssh登錄遠程主機的步驟:


首先证杭,在客戶機hadoop1上運行命令:ssh-copy-id user@host田度,將其公鑰傳送到需要遠程登錄的主機host上面,例如解愤,運行命令:ssh-copy-id hadoop@hadoop02

[if !vml]

[endif]


在節(jié)點hadoop02上查看hadoop用戶主目錄下的.ssh/authorized_keys內(nèi)容:

[if !vml]

[endif]


可以看到這條記錄是hadoop01節(jié)點下hadoop用戶目錄下.ssh/id_rsa.pub公鑰文件內(nèi)容:

[if !vml]

[endif]


所以镇饺,實際上,ssh-copy-id user@host這條命令的作用是:將客戶機用戶的公鑰內(nèi)容添加到遠程主機的user用戶主目錄下的./ssh/authorized_keys文件中送讲;


再來驗證一下奸笤,以hadoop01同時作為客戶機和遠程主機惋啃,運行命令:ssh-copy-id hadoop@hadoop01:

[if !vml]

[endif]


同樣的,依次運行命令:ssh-copy-id hadoop@hadoop03监右、ssh-copy-id

hadoop@hadoop04边灭、ssh-copy-id hadoop@hadoop05:

[if !vml]

[endif]


現(xiàn)在,以hadoop01作為客戶機健盒,驗證下ssh登錄其他節(jié)點绒瘦,可以免密直接ssh登錄,如下圖:


[if !vml]

[endif]


至此扣癣,實現(xiàn)了從客戶機節(jié)點hadoop01惰帽,ssh免密登錄遠程主機hadoop01~hadoop05,回顧一下過程父虑,本質(zhì)是將hadoop01客戶機的hadoop用戶公鑰文件內(nèi)容分發(fā)追加到hadoop01~hadoop05主機的hadoop用戶主目錄下的./ssh/authorized_keys文件中该酗;那么,如果將節(jié)點hadoop01作為主機士嚎,節(jié)點hadoop01~hadoop05作為客戶機并可以免密SSH登錄到主機hadoop01呜魄,則hadoop01節(jié)點的hadoop用戶需要擁有hadoop01~hadoop05五個節(jié)點hadoop用戶的公鑰,所以就需要將節(jié)點hadoop01~hadoop05五個節(jié)點的hadoop用戶的公鑰文件分發(fā)傳送到hadoop01節(jié)點上航邢,這樣就實現(xiàn)了hadoop01~hadoop5五個節(jié)點的hadoop用戶免密ssh登錄到主機hadoop01上耕赘;由于現(xiàn)在hadoop01節(jié)點hadoop用戶主目錄下的./ssh/authorized_keys文件中包含了五個節(jié)點的公鑰,所以只需要將這個文件分發(fā)給其他四個節(jié)點hadoop02~hadoop05膳殷,就可以實現(xiàn)五個節(jié)點之間操骡,互相以hadoop用戶免密SSH登錄。


5)五節(jié)點hadoop用戶相互免密SSH登錄


在節(jié)點hadoop02赚窃、hadoop03册招、hadoop04和hadoop05上分別運行命令:ssh-copy-id hadoop@hadoop01,將各節(jié)點上hadoop用戶的公鑰追加到hadoop01節(jié)點hadoop用戶主目錄下勒极,的.ssh/authorized_keys文件中:


[if !vml]

[endif]


然后是掰,將hadoop01節(jié)點hadoop用戶主目錄的./ssh/authorized_keys文件分發(fā)給其余四個節(jié)點hadoop02、hadoop03辱匿、hadoop04以及hadoop05键痛;

[if !vml]

[endif]


在節(jié)點hadoop02上驗證一下用戶主目錄下.ssh/authorized_keys文件中的內(nèi)容,確實保存著五個節(jié)點hadoop用戶的公鑰匾七,如下圖所示:

[if !vml]

[endif]


并將hadoop01節(jié)點hadoop用戶主目錄下的.ssh/known_hosts文件(因為在第4)步以hadoop01作為客戶機絮短,分別ssh登錄haoop01~hadoop05這五個節(jié)點后,known_host文件就保存了可信賴的遠程服務器的信息)分發(fā)給其余四個節(jié)點hadoop02昨忆、hadoop03丁频、hadoop04以及hadoop05,文件中保存的內(nèi)容如下圖,

[if !vml]

[endif]


具體作用是讓客戶端對服務器進行身份驗證席里;known_hosts文件和authorized_keys文件的區(qū)別簡單概括就是:known_hosts文件允許客戶端對服務器進行身份驗證叔磷, authorized_keys文件允許服務器對用戶進行身份驗證。


如果不分發(fā)奖磁,在客戶機節(jié)點用戶主目錄的./ssh/known_hosts文件中沒有遠程主機的信息改基,那么會出來一個確認:


[if !vml]

[endif]


運行命令:scp .ssh/known_hosts user@host:/home/hadoop/.ssh/:

[if !vml]

[endif]


至此,五個節(jié)點之間的hadoop用戶免密互相遠程登錄完成署穗,可以隨機選擇某個節(jié)點作為客戶機寥裂,另外某個節(jié)點作為主機,然后進行驗證案疲;


2.1.5 集群時間同步配置

參考文檔“海工所_CentOS6.8集群時間同步配置_大數(shù)據(jù)_鄭智”,這里不做贅述麻养。

2.1.6 JDK安裝配置

以節(jié)點hadoop01為例褐啡,將jdk安裝解壓到/app目錄下:

[if !vml]

[endif]


然后,切換到root用戶下鳖昌,編輯/etc/prifile文件备畦,命令為:vim /etc/profile,在文件末尾添加如下文本:


JAVA_HOME=/app/jdk1.8.0_92

CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar

PATH=$JAVA_HOME/bin:$PATH

export JAVA_HOME CLASSPATH PATH


輸入完成后许昨,按“Esc”鍵退出編輯模式懂盐,然后輸入“:wq”,保存退出糕档;

使用命令:source /etc/prifile更新profiel文件莉恼,并輸入命令:java –versionl來驗證下java安裝是否成功,如果輸出版本信息速那,那么就代表安裝配置成功俐银,如下圖所示:


[if !vml]

[endif]


按照上面的步驟,在其他幾個節(jié)點hadoop02~hadoop04做相同的操作端仰,安裝JDK捶惜;或者直接使用scp命令,將JDK的安裝目錄拷貝過去荔烧,然后修改profile文件即可吱七;


例如:從hadoop01節(jié)點上將jdk安裝目錄拷貝到hadoop02上的/app目錄下,命令為:

scp –r /app/jdk1.8.0_92/hadoop@hadoop02:/app/;

[if !vml]

[endif]


然后在hadoop02節(jié)點上鹤竭,切換到root用戶下踊餐,修改profile文件,配置JDK環(huán)境變量诺擅;

[if !vml]

[endif]



使得配置生效市袖,并檢查:

[if !vml]

[endif]

2.2 集群搭建

2.2.1 Zookeeper集群安裝?????

2.2.1.1簡單介紹

Zookeeper集群為分布式系統(tǒng)提供協(xié)調(diào)服務,比如hadoop集群依靠Zookeeper來實現(xiàn)HDFS

NameNode的自動故障轉(zhuǎn)移,以及YARN ResourceManager的高可用苍碟;以及構(gòu)建在hadoop之上的分布式數(shù)據(jù)庫HBase酒觅,它也使用Zookeeper來實現(xiàn)區(qū)域服務器的主選舉(master selection)、租賃管理以及區(qū)域服務器之間的其他通信微峰;


ZooKeeper 遵循一個簡單的客戶端-服務器模型舷丹,其中客戶端是使用服務的節(jié)點(即機器),而服務器是提供服務的節(jié)點蜓肆。ZooKeeper 服務器的集合形成了一個 ZooKeeper 集合體(ensemble)颜凯。在任何給定的時間內(nèi),一個 ZooKeeper 客戶端可連接到一個 ZooKeeper 服務器仗扬。每個 ZooKeeper 服務器都可以同時處理大量客戶端連接症概,如下圖所示:


[if !vml]

[endif]


在分布式系統(tǒng)中,各節(jié)點將是 ZooKeeper 集合體的客戶端早芭,每個 ZooKeeper 服務器都能夠以可擴展的方式處理大量客戶端彼城。例如,HBase依賴于 ZooKeeper 實現(xiàn)區(qū)域退个,服務器的領導者選舉和租賃管理募壕。可以利用一個相對較少(比如說语盈,五個)節(jié)點的 ZooKeeper 集合體運行有 50 個節(jié)點的大型 HBase 集群舱馅。


當客戶端請求讀取特定 znode 的內(nèi)容時,讀取操作是在客戶端所連接的服務器上進行的刀荒。因此代嗤,由于只涉及集合體中的一個服務器,所以讀取是快速和可擴展的照棋。然而资溃,為了成功完成寫入操作,要求 ZooKeeper 集合體的嚴格意義上的多數(shù)節(jié)點都是可用的烈炭。在啟動 ZooKeeper 服務時溶锭,集合體中的某個節(jié)點被選舉為領導者。當客戶端發(fā)出一個寫入請求時符隙,所連接的服務器會將請求傳遞給領導者趴捅。此領導者對集合體的所有節(jié)點發(fā)出相同的寫入請求。如果嚴格意義上的多數(shù)節(jié)點(也被稱為法定數(shù)量(quorum))成功響應該寫入請求霹疫,那么寫入請求被視為已成功完成拱绑。然后,一個成功的返回代碼會返回給發(fā)起寫入請求的客戶端丽蝎。如果集合體中的可用節(jié)點數(shù)量未達到法定數(shù)量猎拨,那么 ZooKeeper 服務將不起作用膀藐。


法定數(shù)量是通過嚴格意義上的多數(shù)節(jié)點來表示的。在集合體中红省,可以包含一個節(jié)點额各,但它不是一個高可用和可靠的系統(tǒng)。如果在集合體中有兩個節(jié)點吧恃,那么這兩個節(jié)點都必須已經(jīng)啟動并讓服務正常運行虾啦,因為兩個節(jié)點中的一個并不是嚴格意義上的多數(shù)。如果在集合體中有三個節(jié)點痕寓,即使其中一個停機了傲醉,您仍然可以獲得正常運行的服務(三個中的兩個是嚴格意義上的多數(shù))。出于這個原因呻率,ZooKeeper 的集合體中通常包含奇數(shù)數(shù)量的節(jié)點硬毕,因為就容錯而言,與三個節(jié)點相比礼仗,四個節(jié)點并不占優(yōu)勢昭殉,因為只要有兩個節(jié)點停機,ZooKeeper 服務就會停止藐守。在有五個節(jié)點的集群上,需要三個節(jié)點停機才會導致 ZooKeeper 服務停止運作蹂风。


在這里有五個節(jié)點卢厂,按照前面的集群規(guī)劃,會搭建五節(jié)點的Zookeeper集群惠啄,下面以hadoop01節(jié)點為例慎恒,介紹安裝配置zookeeper,然后其他節(jié)點通過scp命令直接將hadoop01上配置好的zookeeper安裝目錄拷貝過去就行撵渡;

2.2.1.2 解壓安裝

切換到zookeeper安裝包所在的目錄融柬,然后運行命令:tar -zxvf zookeeper-3.4.10.tar.gz -C /app/;將zookeeper解壓安裝到目錄/app下趋距,如下圖所示:

[if !vml]

[endif]


切換到/app/下的zookeeper安裝目錄粒氧,查看下zookeeper目錄結(jié)構(gòu):

[if !vml]

[endif]


在zookeeper安裝目錄下,創(chuàng)建一個data目錄节腐,用于保存zookeeper快照日志外盯,如下圖所示:

[if !vml]

[endif]

然后在data目錄下,創(chuàng)建一個datalog文件夾翼雀,用于存儲zookeeper事務日志饱苟,如下圖:

[if !vml]

[endif]


2.2.1.3 配置Zookeeper運行配置文件zoo.cfg

Zookeeper的配置文件存放在zookeeper安裝目錄/app/zookeeper-3.4.10/下的conf文件夾下:

[if !vml]

[endif]


其中,zoo_sample.cfg是管理配置zookeeper的配置文件狼渊;log4j.proeprties是zookeeper運行時日志配置文件箱熬;


將zoo_sample.conf重命名為zoo.cfg,并編輯,將內(nèi)容更改為如下:


# The number of milliseconds of each tick

tickTime=2000


# The number of ticks that the initial synchronizationphase can take

initLimit=10


# The number of ticks that can pass betweensending a request and getting an acknowledgement

syncLimit=5


# 存儲內(nèi)存數(shù)據(jù)庫快照日志.

dataDir=/app/zookeeper-3.4.10/data


# 存儲事務日志

dataLogDir=/app/zookeeper-3.4.10/data/datalog


# 監(jiān)聽客戶端連接的端口

clientPort=2181


# the maximum number of client connections.

# increase this if you need to handle moreclients

#maxClientCnxns=60


# The number of snapshots to retain indataDir

#autopurge.snapRetainCount=3

# Purge task interval in hours

# Set to "0" to disable autopurge feature

#autopurge.purgeInterval=1


# zookeeper集群服務器列表信息城须,格式為:server.id=hostName:心跳端口:選舉端口

server.1=hadoop01:2888:3888

server.2=hadoop02:2888:3888

server.3=hadoop03:2888:3888

server.4=hadoop04:2888:3888

server.5=hadoop05:2888:3888


配置參數(shù)解析:

tickTime:基本時間單元蚤认,以毫秒為單位。它用來控制心跳和超時酿傍,默認情況下最小的會話超時時間為兩倍的 tickTime烙懦。


initLimit :此配置表示,允許 follower (相對于 leader 而言的“客戶端”)連接并同步到 leader 的初始化連接時間赤炒,它以 tickTime 的倍數(shù)來表示氯析。當超過設置倍數(shù)的 tickTime 時間,則連接失敗莺褒。


syncLimit :此配置表示掩缓, leader 與 follower 之間發(fā)送消息,請求和應答時間長度遵岩。如果 follower 在設置的時間內(nèi)不能與 leader 進行通信你辣,那么此 follower 將被丟棄。


dataDir :存儲內(nèi)存中數(shù)據(jù)庫快照的位置尘执;注意:如果需要保留zookeeper事務日志信息舍哄,那么可以考慮配置 dataLogDir 的位置。通常情況下數(shù)據(jù)庫快照日志和zookeeper事務日志是分開存儲的誊锭,并且應該謹慎地選擇日志存放的位置表悬,使用專用的日志存儲設備能夠大大地提高系統(tǒng)的性能,如果將日志存儲在比較繁忙的存儲設備上丧靡,那么將會在很大程度上影響系統(tǒng)的性能蟆沫。


clientPort :監(jiān)聽客戶端連接的端口,默認是 2181温治,最好不要修改


最后再增加 ZooKeeper 的服務器列表信息饭庞,格式為: server.id=主機名:心跳端口:選舉端口

例子:server.1=hadoop01:2888:3888

其中 id 雖然可以隨便寫,但是有兩點要求熬荆,第一不能重復舟山,第二范圍是 1-255,并且對應服務器列表上還得存在對應的 id 文件惶看,具體看下面操作


2.2.1.4 配置Zookeeper運行時日志

log4j用于記錄zookeeper集群服務器運行日志捏顺,該日志的配置地址在conf/目錄下的log4j.properties文件中,該文件中有一個配置項為“zookeeper.log.dir=.”纬黎,表示log4j日志文件在與執(zhí)行程序(zkServer.sh)在同一目錄下幅骄。當執(zhí)行zkServer.sh 時,在該文件夾下會產(chǎn)生zookeeper.out日志文件本今。


Zookeeper運行日志配置地址:

[if !vml]

[endif]


Zookeeper運行日志保存位置:

[if !vml]

[endif]


這里就保留默認運行時日志輸出配置拆座;


2.2.1.5配置環(huán)境變量

切換到root用戶下主巍,編輯/etc/profile文件,在文件末尾添加如下兩行:


export ZOOKEEPER_HOME=/app/zookeeper-3.4.10

export PATH=$PATH:$ZOOKEEPER_HOME/bin


2.2.1.6分發(fā)zookeeper安裝目錄到其他服務器節(jié)點上

命令為:

scp -r zookeeper-3.4.10/hadoop@hadoop02:/app/

scp -r zookeeper-3.4.10/ hadoop@hadoop03:/app/

scp -r zookeeper-3.4.10/hadoop@hadoop04:/app/

scp -r zookeeper-3.4.10/hadoop@hadoop05:/app/


2.2.1.7創(chuàng)建myid文件挪凑,保存節(jié)點id

這一步驟孕索,需要在各個節(jié)點上單獨進行操作,應為每個節(jié)點的myid文件保存的內(nèi)容不一樣躏碳,在/app/zookeeper-3.4.10/data目錄下創(chuàng)建一個名叫myid的文件搞旭,用于保存該節(jié)點的id,比如:server.1=hadoop01:2888:3888菇绵,則haddoop01的節(jié)點id就是1肄渗,對應的其他四個服務器節(jié)點都應該做類似的操作,現(xiàn)拿節(jié)點hadoop01為例:


[if !vml]

[endif]


2.2.1.8啟動集群

Zookeeper的可執(zhí)行腳本存放在zookeeper安裝目錄下的bin目錄下咬最,如下圖:

[if !vml]

[endif]


切換到bin目錄翎嫡,運行zkserver.sh腳本啟動集群,命令為:./zkServer.sh start

[if !vml]

[endif]


查看進程:

[if !vml]

[endif]


2.2.1.9 查看集群狀態(tài)

使用命令:./zkServer.sh status查看服務器角色(leader or followe):

[if !vml]

[endif]


出現(xiàn)錯誤“contacting service. It is probably not running”


先停止zookeeper永乌,命令為:./zkServer.sh stop

[if !vml]

[endif]


重新使用命令:./zkServer.sh start-foreground來啟動zookeeper惑申,這個命令是在前臺運行zookeeper,會輸出啟動日志:

[if !vml]

[endif]


日志報錯:”Cannot open channel to 3 at election address

hadoop03/192.168.1.13:3888”翅雏,但是可以從hadoop01節(jié)點上ping通hadoop03:

[if !vml]

[endif]


猜測是防火墻的問題圈驼,查看hadoop01節(jié)點的防火墻狀態(tài)未開啟:

[if !vml]

[endif]


查看hadoop03節(jié)點的防火墻狀態(tài),發(fā)現(xiàn)是開啟狀態(tài)望几;

[if !vml]

[endif]


關(guān)閉hadoop03節(jié)點的防火墻碗脊,并檢查其余幾個節(jié)點的防火墻狀態(tài)是否關(guān)閉,然后重啟Zookeeper集群(注意:雖然我們在配置文件中寫明了服務器的列表信息橄妆,但是還是需要去每一臺服務器去啟動,不是一鍵啟動集群模式)


重啟成功后祈坠,使用命令:./zkServer.sh status查看服務器角色(leader or followe):

Hadoop01節(jié)點上:

[if !vml]

[endif]


Hadoop02節(jié)點上:

[if !vml]

[endif]

Hadoop03節(jié)點上:

[if !vml]

[endif]


Hadoop04節(jié)點上:

[if !vml]

[endif]

Hadoop05節(jié)點上:

[if !vml]

[endif]



至此害碾,zookeeper集群搭建完畢


2.2.2 Hadoop集群安裝

下面以配置節(jié)點hadoop01為例,其余節(jié)點可以通過使用scp命令拷貝hadoop01的hadoop安裝目錄以及其他配置進行安裝赦拘;

2.2.2.1解壓安裝

命令為:tar -zxvf hadoop-2.6.5.tar.gz -C /app/


解壓后的目錄結(jié)構(gòu)如下:

[if !vml]

[endif]



2.2.2.2配置環(huán)境變量

切換到root用戶下慌随,修改/etc/profile文件,添加如下內(nèi)容:

export HADOOP_HOME=/app/hadoop-2.6.5/

exportLD_LIBRARY_PATH=$HADOOP_HOME/lib/native

exportPATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH


2.2.2.3修改配置文件

1躺同、配置hadoop-env.sh阁猜,配置JDK安裝路徑:

# The java implementation to use.

export JAVA_HOME=/app/jdk1.8.0_92


2、配置core-site.xml蹋艺,修改內(nèi)容如下:


???????

???????????????fs.defaultFS

??????????????? hdfs://HadoopHACluster




???????

???????????????hadoop.tmp.dir

???????????????/app/hadoop-2.6.5/data/tmpdir



???????

???????????????io.file.buffer.size

??????????????? 4096




???????

???????????????ha.zookeeper.quorum??????????? hadoop01:2181,hadoop02:2181,hadoop03:2181,hadoop04:2181,hadoop05:2181




???????

?????????fs.trash.interval

?????????1440

?????????Number ofminutes between trash checkpoints. If zero, the trash feature isdisabled.




3剃袍、配置hdfs-site.xml文件,配置內(nèi)容如下:



???????

????????????????dfs.namenode.name.dir

????????????????file:/app/hadoop-2.6.5/data/dfs/name




???????

????????????????dfs.datanode.data.dir

???????????????? file:/app/hadoop-2.6.5/data/dfs/data




???????

???????????????dfs.namenode.checkpoint.dir

???????????????file:/app/hadoop-2.6.5/data/dfs/namesecondary

??????????????? secondarynamenode data dir

??????????????? true




???????

???????????????dfs.replication

??????????????? 2

??????????????? hdfs datacopy number




???????

????????????????dfs.nameservices

???????????????? HadoopHACluster




???????

????????????????dfs.ha.namenodes.HadoopHACluster

???????????????? hadoop01,hadoop02




???????

????????????????dfs.namenode.rpc-address.HadoopHACluster.hadoop01

????????????????hadoop01:9000


???????

????????????????dfs.namenode.rpc-address.HadoopHACluster.hadoop02

????????????????hadoop02:9000




???????

???????????????dfs.namenode.http-address.HadoopHACluster.hadoop01

???????????????hadoop01:50070


???????

???????????????dfs.namenode.http-address.HadoopHACluster.hadoop02

???????????????hadoop02:50070




???????

???????????????dfs.namenode.shared.edits.dir

???????????????qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485;hadoop04:8485;hadoop05:8485/HadoopHACluster




???????

????????????????dfs.journalnode.edits.dir

????????????????/app/hadoop-2.6.5/data/journal



???????

????????????????dfs.journalnode.rpc-address

????????????????0.0.0.0:8485

???????????????? journalnode的rpc地址




???????

???????????????dfs.ha.automatic-failover.enabled

??????????????? true




???????

???????????????dfs.client.failover.proxy.provider.HadoopHACluster

???????????????org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider

??????????????? 指定hdfs client來識別HadoopHACluster命名空間并在namenode切換期間識別namnode的proxy類




???????

???????????????dfs.ha.fencing.methods

???????????????sshfence




???????

??????????????? dfs.ha.fencing.ssh.private-key-files

???????????????/home/hadoop/.ssh/id_rsa



???????

???????????????ha.failover-controller.cli-check.rpc-timeout.ms

???????????????60000

???????????????getServiceState timout



???????

???????????????ipc.client.connect.timeout

???????????????60000



???????

??????????????? dfs.client.read.shortcircuit.buffer.size

??????????????? 4096



???????

???????????????dfs.image.transfer.bandwidthPerSec

???????????????4194304

??????????????? 用于圖片傳輸?shù)膸?/p>




???????

???????????????dfs.permissions

???????????????false

??????????????? offpermission check




???????

???????????????dfs.support.append

??????????????? true

??????????????? 允許追加文件



???????

??????????????? dfs.datanode.max.xcievers

??????????????? 4096

??????????????? datanode的文件句柄數(shù)限制



4捎谨、配置mapred-site.xml文件民效,配置內(nèi)容如下:




???

???????mapreduce.framework.name

???????yarn



???

???????mapred.system.dir

???????file:/app/hadoop-2.6.5/data/mapred/system

???????true



???

???????mapred.local.dir

???????file:/app/hadoop-2.6.5/data/mapred/local

???????true



???

???????mapreduce.map.memory.mb

???????1024

??? ????每個MapReduce作業(yè)的map任務可以申請的內(nèi)存資源數(shù)量



???

???????mapreduce.map.cpu.vcores

???????1

???????每個MapReduce作業(yè)的map任務可以申請的虛擬CPU資源的數(shù)量



???

???????mapreduce.reduce.memory.mb

???????1024

???????每個MapReduce作業(yè)的reduce任務可以申請的內(nèi)存資源數(shù)量




???

???????mapreduce.jobhistory.address

???????hadoop01:10020




???

???????mapreduce.jobhistory.webapp.address

???????hadoop01:19888




5憔维、配置yarn-site.xml文件,內(nèi)容如下:




???

???????yarn.nodemanager.aux-services

???????mapreduce_shuffle

???????shuffle service that needs to be set for Map Reduceto run





???

???????yarn.resourcemanager.ha.enabled

???????true




??

???????yarn.resourcemanager.ha.automatic-failover.enabled

???????true




??

????????yarn.resourcemanager.cluster-id

????????yarncluster




??

????????yarn.resourcemanager.ha.rm-ids

????????rm1,rm2




??

???????yarn.resourcemanager.hostname.rm1

???????hadoop04


??

???????yarn.resourcemanager.hostname.rm2

???????hadoop05




??

????????yarn.resourcemanager.webapp.address.rm1

????????hadoop04:8088


??

????????yarn.resourcemanager.webapp.address.rm2

????????hadoop05:8088




??

???????yarn.resourcemanager.zk-address

???????hadoop01:2181,hadoop02:2181,hadoop03:2181,hadoop04:2181,hadoop05:2181


6畏邢、配置slaves文件业扒,內(nèi)容如下:

HAhadoop01

HAhadoop02

HAhadoop03

HAhadoop04

HAhadoop05

如下圖:

[if !vml]

[endif]


7、創(chuàng)建配置文件中涉及的目錄

mkdir -p /home/hadoop/app/hadoop-2.6.5/data/tmpdir

mkdir -p /home/hadoop/app/hadoop-2.6.5/data/dfs/name

mkdir -p /home/hadoop/app/hadoop-2.6.5/data/dfs/data

mkdir -p /home/hadoop/app/hadoop-2.6.5/data/dfs/namesecondary

mkdir -p /home/hadoop/app/hadoop-2.6.5/data/journal

mkdir -p /home/hadoop/app/hadoop-2.6.5/data/mapred/system

mkdir -p /home/hadoop/app/hadoop-2.6.5/data/mapred/local

mkdir -p /home/hadoop/app/hadoop-2.6.5/data/yarn/rmlogs

mkdir -p /home/hadoop/app/hadoop-2.6.5/data/yarn/rmstore


如下圖:

[if !vml]

[endif]


2.2.2.4 分發(fā)hadoop安裝目錄以及配置文件profile


1)將hadoop安裝目錄同步到集群其它節(jié)點

scp -r hadoop-2.6.5/ hadoop@hadoop02:/app

scp -r hadoop-2.6.5/ hadoop@hadoop03:/app

scp -r hadoop-2.6.5/ hadoop@hadoop04:/app

scp -r hadoop-2.6.5/ hadoop@hadoop05:/app


2)分發(fā)配置文件/etc/profile

scp -r /etc/profile root@hadoop02:/etc

scp -r /etc/profile root@hadoop03:/etc

scp -r /etc/profile root@hadoop04:/etc

scp -r /etc/profile root@hadoop05:/etc


拷貝過去之后舒萎,記得使用source命令使profile中配置的生效程储,命令是:source /etc/profile。

2.2.2.4 集群初始化操作

1)啟動zookeeper集群

若沒有啟動zookeeper集群臂寝,則分別在節(jié)點hadoop01~hadoop05上運行命令:zkServer.sh start來啟動集群章鲤;


2)格式化ZKFC(在master節(jié)點上執(zhí)行)

命令為:hdfs zkfc –formatZK


這里在hadoop01上:

[if !vml]

[endif]


3)啟動journalnode

分別在hadoop01~hadoop05上執(zhí)行,命令為:hadoop-daemon.sh start journalnode


比如在hadoop01上:

[if !vml]

[endif]


在其他幾個節(jié)點上執(zhí)行相同的操作交煞,使用jps命令咏窿,若出現(xiàn)JournalNode,則表明JournalNode啟動成功素征;


4)格式化HDFS(在master節(jié)點上執(zhí)行)

這里在hadoop01節(jié)點上進行集嵌,命令為:hdfs namenode –format

[if !vml]

[endif]

[if !vml]

[endif]


格式化后會在hadoop工作目錄的元數(shù)據(jù)存儲目錄中生成一些數(shù)據(jù)

[if !vml]

[endif]


5)將格式化后hadoop01節(jié)點hadoop工作目錄中的元數(shù)據(jù)目錄復制到hadoop02節(jié)點上相應的目錄下:

命令為:scp -r /app/hadoop-2.6.5/data/dfs/name/*hadoop@hadoop02:/app/hadoop-2.6.5/data/dfs/name/


如下圖:

[if !vml]

[endif]


到此為止。hadoop集群的初始化就OK 了御毅。以上的初始化在成功了之后根欧,就堅決不能再做了。


2.2.2.5 啟動集群

1)端蛆、啟動Zookeeper集群凤粗;


2)、啟動HDFS 今豆,命令為:start-dfs.sh嫌拣;不管在哪個節(jié)點執(zhí)行都可以[if !vml]

[endif]


分別在hadoop01~hadoop05節(jié)點上查看啟動的進程;

Hadoop01節(jié)點上:

[if !vml]

[endif]

Hadoop02節(jié)點上:

[if !vml]

[endif]


Hadoop03節(jié)點上:

[if !vml]

[endif]


Hadoop04節(jié)點上:

[if !vml]

[endif]


Hadoop05節(jié)點上:

[if !vml]

[endif]


3)啟動YARN集群:start-yarn.sh呆躲;最好在YARN的主節(jié)點上執(zhí)行异逐,(在配置文件中設置yarn主節(jié)點在hadoop04上)


在節(jié)點hadoop04上:

[if !vml]

[endif]


查看進程:

[if !vml]

[endif]


另外一個resourcemanager必須手動啟動,yarn-daemon.sh start resourcemanager(hadoop05是規(guī)劃當中resourcemanager的備份節(jié)點)


在hadoop05節(jié)點上:

[if !vml]

[endif]



各節(jié)點所有進程全部啟動之后各自的進程狀態(tài)如下:

Hadoop01:

[if !vml]

[endif]


Hadoop02:

[if !vml]

[endif]

Hdooop03:

[if !vml]

[endif]


Haodop04:

[if !vml]

[endif]


Hadoop05:

[if !vml]

[endif]



4)通過web界面查看集群狀態(tài)


1插掂、查看hdfs

訪問地址:http://192.168.1.11:50070

[if !vml]

[endif]

訪問地址:http://192.168.1.12:50070

secondary namenode:

[if !vml]

[endif]


2灰瞻、查看yarn節(jié)點啟動情況:


訪問地址:http://192.168.1.14:8088


[if !vml]

[endif]


查看yarn集群節(jié)點:

[if !vml]

[endif]


訪問地址:http://192.168.1.15:8088

因為hadoop05是stanby resourcemanager,會自動跳轉(zhuǎn)到hadoop04節(jié)點上:

[if !vml]

[endif]


5)查看集群HA狀態(tài)

Hdfs:

hdfs haadmin -getServiceState hadoop01

hdfs haadmin -getServiceState hadoop02


[if !vml]

[endif]


YARN:

yarn rmadmin -getServiceState rm1

yarn rmadmin -getServiceState rm2

[if !vml]

[endif]


2.2.2.6 集群測試


[if !supportLists]1辅甥、? [endif]測試hdfs HA


在上文中酝润,根據(jù)命令hdfs haadmin -getServiceState hadoop01,可知hadoop01是active namenode節(jié)點璃弄,在節(jié)點hadoop01上kill掉namenode進程后:

[if !vml]

[endif]

可以看到要销,hadoop02變成了active namenode節(jié)點;


再把hadoop01節(jié)點的namenode進程啟動起來夏块,然后查看節(jié)點狀態(tài):

[if !vml]

[endif]

可以看到hadoop01節(jié)點是standby蕉陋,hadoop02節(jié)點是active捐凭;


[if !supportLists]2、? [endif]測試YARN HA


在節(jié)點hadoop04上:

[if !vml]

[endif]


再把hadoop04節(jié)點上的resourceManager進程啟動起來:?????????????


[if !vml]

[endif]

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末凳鬓,一起剝皮案震驚了整個濱河市茁肠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌缩举,老刑警劉巖垦梆,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異仅孩,居然都是意外死亡托猩,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門辽慕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來京腥,“玉大人,你說我怎么就攤上這事溅蛉」耍” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵船侧,是天一觀的道長欠气。 經(jīng)常有香客問我,道長镜撩,這世上最難降的妖魔是什么预柒? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮袁梗,結(jié)果婚禮上宜鸯,老公的妹妹穿的比我還像新娘。我一直安慰自己遮怜,他們只是感情好顾翼,可當我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著奈泪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪灸芳。 梳的紋絲不亂的頭發(fā)上涝桅,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天,我揣著相機與錄音烙样,去河邊找鬼冯遂。 笑死,一個胖子當著我的面吹牛谒获,可吹牛的內(nèi)容都是我干的蛤肌。 我是一名探鬼主播壁却,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼裸准!你這毒婦竟也來了展东?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤炒俱,失蹤者是張志新(化名)和其女友劉穎盐肃,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體权悟,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡砸王,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了峦阁。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谦铃。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖榔昔,靈堂內(nèi)的尸體忽然破棺而出驹闰,到底是詐尸還是另有隱情,我是刑警寧澤件豌,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布疮方,位于F島的核電站,受9級特大地震影響茧彤,放射性物質(zhì)發(fā)生泄漏硫麻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一洋魂、第九天 我趴在偏房一處隱蔽的房頂上張望顽腾。 院中可真熱鬧,春花似錦珠洗、人聲如沸溜歪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蝴猪。三九已至,卻和暖如春膊爪,著一層夾襖步出監(jiān)牢的瞬間自阱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工米酬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留沛豌,地道東北人。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓赃额,卻偏偏與公主長得像加派,于是被迫代替她去往敵國和親叫确。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,614評論 2 353