日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

HDFS HA介绍及配置理解

發(fā)布時(shí)間:2025/4/16 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDFS HA介绍及配置理解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、HDFS HA介紹

相比于Hadoop1.0,Hadoop 2.0中的HDFS增加了兩個(gè)重大特性,HA和Federaion。HA即為High Availability,用于解決NameNode單點(diǎn)故障問(wèn)題,該特性通過(guò)熱備的方式為主NameNode提供一個(gè)備用者,一旦主NameNode出現(xiàn)故障,可以迅速切換至備NameNode,從而實(shí)現(xiàn)不間斷對(duì)外提供服務(wù)。Federation即為“聯(lián)邦”,該特性允許一個(gè)HDFS集群中存在多個(gè)NameNode同時(shí)對(duì)外提供服務(wù),這些NameNode分管一部分目錄(水平切分),彼此之間相互隔離,但共享底層的DataNode存儲(chǔ)資源。

在一個(gè)典型的HDFS HA場(chǎng)景中,通常由兩個(gè)NameNode組成,一個(gè)處于active狀態(tài),另一個(gè)處于standby狀態(tài)。Active NameNode對(duì)外提供服務(wù),比如處理來(lái)自客戶端的RPC請(qǐng)求,而Standby NameNode則不對(duì)外提供服務(wù),僅同步active namenode的狀態(tài),以便能夠在它失敗時(shí)快速進(jìn)行切換。

為了能夠?qū)崟r(shí)同步Active和Standby兩個(gè)NameNode的元數(shù)據(jù)信息(實(shí)際上editlog),需提供一個(gè)共享存儲(chǔ)系統(tǒng),可以是NFS、QJM(Quorum Journal Manager)或者Bookeeper,Active Namenode將數(shù)據(jù)寫(xiě)入共享存儲(chǔ)系統(tǒng),而Standby監(jiān)聽(tīng)該系統(tǒng),一旦發(fā)現(xiàn)有新數(shù)據(jù)寫(xiě)入,則讀取這些數(shù)據(jù),并加載到自己內(nèi)存中,以保證自己內(nèi)存狀態(tài)與Active NameNode保持基本一致,如此這般,在緊急情況下standby便可快速切為active namenode。

Hadoop0.23.2版本之前, NameNode是HDFS集群的單點(diǎn)故障點(diǎn),每一個(gè)集群只有一個(gè)NameNode,如果這個(gè)機(jī)器或進(jìn)程不可用,整個(gè)集群就無(wú)法使用,直到重啟NameNode或者新啟動(dòng)一個(gè)NameNode節(jié)點(diǎn)。影響HDFS集群不可用主要包括以下兩種情況:

1)第一種情況是如機(jī)器宕機(jī)這樣的意外情況,將導(dǎo)致集群不可用,只有在重啟NameNode之后才可使用。

2)第二種情況是計(jì)劃內(nèi)的軟件或硬件升級(jí)(NameNode節(jié)點(diǎn)),將導(dǎo)致集群在短時(shí)間范圍內(nèi)不可用。

?

HDFS的HA就是為了解決上述問(wèn)題,通過(guò)提供選擇運(yùn)行在同一集群中的一個(gè)熱備用的“主/備”兩個(gè)冗余NameNodes。這允許在機(jī)器宕機(jī)或系統(tǒng)維護(hù)的時(shí)候,快速的轉(zhuǎn)移到另一個(gè)NameNode.

一個(gè)典型的HA集群,兩個(gè)單獨(dú)的機(jī)器配置為NameNodes,在任何時(shí)候,一個(gè)NameNode處于活動(dòng)狀態(tài),另一個(gè)處于待機(jī)狀態(tài),活動(dòng)的NameNode負(fù)責(zé)處理集群中所有客戶端的操作,待機(jī)時(shí)僅僅作為一個(gè)slave,保持足夠的狀態(tài),如果有必要提供一個(gè)快速的故障轉(zhuǎn)移.

為了保持備用節(jié)點(diǎn)與活動(dòng)節(jié)點(diǎn)狀態(tài)的同步,目前的實(shí)現(xiàn)需要兩個(gè)節(jié)點(diǎn)同時(shí)訪問(wèn)一個(gè)共享存儲(chǔ)設(shè)備(例如從NASNFS掛載)到一個(gè)目錄。將有可能在未來(lái)的版本中放寬此限制。當(dāng)活動(dòng)節(jié)點(diǎn)對(duì)命名空間進(jìn)行任何修改,它將把修改記錄寫(xiě)到共享目錄下的一個(gè)日志文件,備用節(jié)點(diǎn)會(huì)監(jiān)聽(tīng)這個(gè)目錄,當(dāng)發(fā)現(xiàn)更改時(shí),它會(huì)把修改內(nèi)容同步到自己的命名空間。備用節(jié)點(diǎn)在故障轉(zhuǎn)移時(shí),它將保證已經(jīng)讀取了所有共享目錄內(nèi)的更改記錄,保證在發(fā)生故障前的狀態(tài)與活動(dòng)節(jié)點(diǎn)保持完全一致。

為了提供快速的故障轉(zhuǎn)移,必須保證備用節(jié)點(diǎn)有最新的集群中塊的位置信息,為了達(dá)到這一點(diǎn),Datanode節(jié)點(diǎn)需要配置兩個(gè)nameNode的位置,同時(shí)發(fā)送塊的位置信息和心跳信息到兩個(gè)nameNode。

任何時(shí)候只有一個(gè)namenode處于活動(dòng)狀態(tài),對(duì)于HA集群的操作是至關(guān)重要的,否則兩個(gè)節(jié)點(diǎn)之間的狀態(tài)就會(huì)產(chǎn)生沖突,數(shù)據(jù)丟失或其它不正確的結(jié)果,為了達(dá)到這個(gè)目的或者所謂的“裂腦場(chǎng)景”出現(xiàn),管理員必須為共享存儲(chǔ)配置至少一個(gè)(fencing)方法。在宕機(jī)期間,如果不能確定之間的活動(dòng)節(jié)點(diǎn)已經(jīng)放棄活動(dòng)狀態(tài),fencing進(jìn)程負(fù)責(zé)中斷以前的活動(dòng)節(jié)點(diǎn)編輯存儲(chǔ)的共享訪問(wèn)。這可以防止任何進(jìn)一步的修改命名空間,允許新的活動(dòng)節(jié)點(diǎn)安全地進(jìn)行故障轉(zhuǎn)移。

注:目前,只有手動(dòng)故障轉(zhuǎn)移支持。這就意味著HA nameNode不能自動(dòng)檢測(cè)活動(dòng)nameNode的失敗,而是通過(guò)手動(dòng)啟動(dòng)故障轉(zhuǎn)移。自動(dòng)故障檢測(cè)和故障轉(zhuǎn)移將在未來(lái)的版本中實(shí)現(xiàn)。

2、HA部署硬件資源

為了部署一個(gè)HA集群環(huán)境,您需要準(zhǔn)備以下資源:

1)NameNode 機(jī)器:運(yùn)行活動(dòng)節(jié)點(diǎn)和備用節(jié)點(diǎn)的機(jī)器和非HA環(huán)境的機(jī)器需要有同相的硬件配置。

2)共享存儲(chǔ):需要有一個(gè)主備namenode節(jié)點(diǎn)都是可讀寫(xiě)的共享目錄,通常情況,這是一個(gè)遠(yuǎn)程的文件管理器,它支持使用NFS掛載到每個(gè)namenode節(jié)點(diǎn)。目前只支持一個(gè)可編輯目錄。因此,系統(tǒng)的是否可用將受限于共享目錄是否可用,因此,為了消除所有單點(diǎn)故障,需要對(duì)共享目錄再加冗余,具體來(lái)說(shuō),多個(gè)網(wǎng)絡(luò)路徑的存儲(chǔ)需要實(shí)現(xiàn)存儲(chǔ)系統(tǒng)自身的冗余。因?yàn)檫@個(gè)原因,建議共享存儲(chǔ)服務(wù)器是一個(gè)高品質(zhì)的專用NAS設(shè)備,而不是一個(gè)簡(jiǎn)單的Linux服務(wù)器。、

注:在HA集群環(huán)境里,備用的namenode還要執(zhí)行檢測(cè)命名空間的狀態(tài),因此,沒(méi)有必要再運(yùn)行Secondary NameNode,CheckpointNode,BackupNode。事實(shí)上,這樣做將會(huì)報(bào)錯(cuò),這也允許在從非集群環(huán)境到集群環(huán)境的重新配置時(shí),重新利用之前的Secondary NameNode的硬件資源。

3、HA部署配置簡(jiǎn)介

類似聯(lián)邦配置,HA配置向后兼容,允許在不改變當(dāng)前單節(jié)點(diǎn)的情況下配置成集群環(huán)境,新的配置方案確保了在集群環(huán)境中的所有節(jié)點(diǎn)的配置文件都是相同的,沒(méi)有必要因?yàn)楣?jié)點(diǎn)的不同而配置不同的文件。

和聯(lián)邦配置一樣,HA集群環(huán)境重復(fù)使用名稱服務(wù)ID來(lái)確定一個(gè)單一的HDFS實(shí)例,實(shí)際上可能包括多個(gè)HA namenodes.此外,一個(gè)新的namenode增加到HA,集群中的每一個(gè)nameNode都有一個(gè)不同的ID來(lái)標(biāo)識(shí)它,為了支持所有namenode有同一個(gè)配置文件,所有的配置參數(shù)都以命名服務(wù)ID和nameNodeID為后綴。配置HA nameNodes,您需要增加一些配置選項(xiàng)到 hdfs-site.xml 配置文件。

配置選項(xiàng)的順序不重要,但dfs.federation.nameservices和dfs.ha.namenodes.[nameserviceID]的值將決定下面配置的Key值。因此,在配置其它選項(xiàng)前,需要確定這兩個(gè)選項(xiàng)的值。

1)dfs.federation.nameservices一個(gè)新的名稱服務(wù)的邏輯名稱。為名稱服務(wù)選擇一個(gè)邏輯名稱,如“mycluster”,使用這個(gè)邏輯名稱作為這個(gè)配置項(xiàng)的值。這個(gè)名稱可以是隨意的,它將用于配置和集群環(huán)境中HDFS絕對(duì)路徑的認(rèn)證組件

注:如果您還使用HDFS聯(lián)邦,這個(gè)配置項(xiàng)應(yīng)該包括其它的名稱服務(wù)列表,HA或者其它,用逗號(hào)進(jìn)行分隔。

<property>

<name>dfs.federation.nameservices</name>

?<value>mycluster</value>

</property>

2)dfs.ha.namenodes.[nameservice ID]在名稱服務(wù)中每一個(gè)nameNode的唯一標(biāo)識(shí)符配置一個(gè)逗號(hào)分隔的NameNode的ID的列表,DataNode會(huì)用它來(lái)確定在集群中的所有namenode.如我們前面使用"mycluster"作為我們名稱服務(wù)的ID,你如果使用nn1和nn2作為namenode的ID,你應(yīng)該這樣配置:

<property>

<name>dfs.ha.namenodes.mycluster</name>

<value>nn1,nn2</value>

</property>

注:當(dāng)前一個(gè)名稱服務(wù)最多只允許配置兩個(gè)namenode

3)dfs.namenode.rpc-address.[nameservice ID].[name node ID]每一個(gè)namenode監(jiān)聽(tīng)的標(biāo)準(zhǔn)RPC地址對(duì)于前面配置的兩個(gè)namenode的ID,設(shè)置namenode節(jié)點(diǎn)詳細(xì)的地址和端口,注意,這個(gè)配置項(xiàng)將在兩個(gè)單獨(dú)的配置項(xiàng)里配置,如:

<property>

<name>dfs.namenode.rpc-address.mycluster.nn1</name>

<value>machine1.example.com:8020</value>

</property>

<property>

?<name>dfs.namenode.rpc-address.mycluster.nn2</name>

<value>machine2.example.com:8020</value>

</property>

注:如果你愿意,你可以配置相同的RPC地址。

4)dfs.namenode.http-address.[nameservice ID].[namenode ID]每一個(gè)namenode監(jiān)聽(tīng)的標(biāo)準(zhǔn)HTTP地址和RPC地址一樣,設(shè)置兩個(gè)namenode監(jiān)聽(tīng)的http地址,如:

<property>

<name>dfs.namenode.http-address.mycluster.nn1</name>

<value>machine1.example.com:50070</value>

</property>

<property>

<name>dfs.namenode.http-address.mycluster.nn2</name>

<value>machine2.example.com:50070</value>

</property>

注:如果你啟用了hadoop的安全功能,你也可以同樣設(shè)置成https地址。

5)dfs.namenode.shared.edits.dir共享存儲(chǔ)目錄的位置這是配置備份節(jié)點(diǎn)需要隨時(shí)保持同步活動(dòng)節(jié)點(diǎn)所作更改的遠(yuǎn)程共享目錄,你只能配置一個(gè)目錄,這個(gè)目錄掛載到兩個(gè)namenode上都必須是可讀寫(xiě)的,且必須是絕對(duì)路徑。如:

<property>

<name>dfs.namenode.shared.edits.dir</name>

<value>file:///mnt/filer1/dfs/ha-name-dir-shared</value>

</property>

6)dfs.client.failover.proxy.provider.[nameserviceID]HDFS客戶端用來(lái)和活動(dòng)的namenode節(jié)目聯(lián)系的java類配置的java類是用來(lái)給HDFS客戶端判斷哪個(gè)namenode節(jié)點(diǎn)是活動(dòng)的,當(dāng)前是哪個(gè)namenode處理客戶端的請(qǐng)求,當(dāng)前hadoop唯一的實(shí)現(xiàn)類是ConfiguredFailoverProxyProvider,除非你自己定義了一個(gè)類,否則都將使用這個(gè)類。如:

<property>

<name>dfs.client.failover.proxy.provider.mycluster</name>

<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

</property>

7)dfs.ha.fencing.methods將用于停止活動(dòng)NameNode節(jié)點(diǎn)的故障轉(zhuǎn)移期間的腳本或Java類的列表任何時(shí)候只有一個(gè)namenode處于活動(dòng)狀態(tài),對(duì)于HA集群的操作是至關(guān)重要的,因此,在故障轉(zhuǎn)移期間,在啟動(dòng)備份節(jié)點(diǎn)前,我們首先要確保活動(dòng)節(jié)點(diǎn)處于等待狀態(tài),或者進(jìn)程被中止,為了達(dá)到這個(gè)目的,您至少要配置一個(gè)強(qiáng)行中止的方法,或者回車分隔的列表,這是為了一個(gè)一個(gè)的嘗試中止,直到其中一個(gè)返回成功,表明活動(dòng)節(jié)點(diǎn)已停止。hadoop提供了兩個(gè)方法:shell和sshfence,要實(shí)現(xiàn)您自己的方法,請(qǐng)看org.apache.hadoop.ha.NodeFencer類。

sshfence 通過(guò)ssh連接活動(dòng)namenode節(jié)點(diǎn),殺掉進(jìn)程。為了實(shí)現(xiàn)SSH登錄殺掉進(jìn)程,還需要配置免密碼登錄的SSH密匙信息,如下所示:

<property>

<name>dfs.ha.fencing.methods</name>

<value>sshfence</value>

</property>

<property>

<name>dfs.ha.fencing.ssh.private-key-files</name>

<value>/home/exampleuser/.ssh/id_rsa</value>

</property>

另外,也可以配置一個(gè)用戶名和SSH端口。也可以為SSH設(shè)定一個(gè)超時(shí),以毫秒為單位,它可以像這樣配置:

<property>

<name>dfs.ha.fencing.methods</name>

<value>sshfence([[username][:port]])</value>

</property>

<property>

<name>dfs.ha.fencing.ssh.connect-timeout</name>

<value>34</value>

</property>

shell -執(zhí)行任意的shell命令來(lái)終止活動(dòng)namenode節(jié)點(diǎn),配置如下:

<property>

<name>dfs.ha.fencing.methods</name>

<value>shell(/path/to/my/script.sharg1arg2 ...)</value>

</property>

shell腳本將會(huì)運(yùn)行在包括所有hadoop配置參數(shù)變量的環(huán)境中,只需將配置key的.換成_即可。如dfs_namenode_rpc-address。除此之外,還包括以下的變量:

$target_host需要中止的服務(wù)器hostname

$target_port需要中止的服務(wù)器端口

$target_address上面兩個(gè)參數(shù)的組合

$target_nameserviceid需要中止的名稱服務(wù)ID

$target_namenodeid

需要中止的namenode的ID

這些變量也可以直接在shell腳本中使用,如:

<property>

<name>dfs.ha.fencing.methods</name>

<value>shell(/path/to/my/script.sh--nameservice=$target_nameserviceid$target_host:$target_port)</value>

</property>

如果腳本返回0表示中止成功,返回其它值表示失敗,同時(shí)將嘗試列表中的其它中止方法。

注:這個(gè)方法沒(méi)有實(shí)現(xiàn)超時(shí)設(shè)置,所有超時(shí)設(shè)置都取決于腳本自身。

8)fs.defaultFS當(dāng)FS客戶端沒(méi)有設(shè)置時(shí)的默認(rèn)路徑的前綴。另外,您可以配置為hadoop客戶端配置HA集群的URI作為默認(rèn)路徑。如果你使用"mycluster"作為名稱服務(wù)ID,那么在core-site.xml文件中將配置為:

<property>

<name>fs.defaultFS</name>

<value>hdfs://mycluster</value>

</property>

?

4、HA部署詳情

所有配置完成后,最初必須同步兩個(gè)HAnamenode磁盤(pán)上的元數(shù)據(jù)。如果您是全新安裝一個(gè)HDFS集群,那么您需要在其中一個(gè)namenode運(yùn)行格式化命令(hdfsnamenode -format),如果你已經(jīng)格式化過(guò)namenode或者是從一個(gè)非HA環(huán)境轉(zhuǎn)換到HA環(huán)境,那么你需要使用scp或類似的命令把namenode上的元數(shù)據(jù)目錄復(fù)制到另一個(gè)namenode。通過(guò)配置 dfs.namenode.name.dir 和dfs.namenode.edits.dir兩個(gè)選項(xiàng)到包含namenode元數(shù)據(jù)目錄的位置。在這個(gè)時(shí)候,你必須保證之前配置的共享目錄包括在您namenode元數(shù)據(jù)目錄下的最近的編輯文件信息。然后,您可以和平時(shí)啟動(dòng)namenode一樣,啟動(dòng)兩個(gè)HA namenode。

您可以通過(guò)配置的HTTP web地址訪問(wèn)兩個(gè)namenode,你會(huì)看到兩個(gè)HAnamenode當(dāng)前的狀態(tài)(主/備),當(dāng)namenode啟動(dòng)的時(shí)候,它的最被狀態(tài)都是“備”狀態(tài)。

5、HA管理命令

現(xiàn)在完成了配置和啟動(dòng),你可以執(zhí)行其它的命令來(lái)管理你的HA集群。具體來(lái)說(shuō),你應(yīng)該熟悉所有hdfs haadmin下的所有命令。不加任何參數(shù)的情況下,將顯示如下信息:

Usage:DFSHAAdmin [-ns<nameserviceId>]

[-transitionToActive<serviceId>]

?[-transitionToStandby<serviceId>]

?[-failover [--forcefence][--forceactive]<serviceId> <serviceId>]

?[-getServiceState<serviceId>]

?[-checkHealth<serviceId>]

?[-help <command>]

本指南將介紹這此子命令的高級(jí)別用法,每個(gè)命令的詳細(xì)使用幫助,您可以運(yùn)行如下命令來(lái)查看:
hdfs haadmin -help<command> transitionToActive和transitionToStandby就是把指定的namenode轉(zhuǎn)換到主/備狀態(tài)。

注:這個(gè)命令把指定的namenode轉(zhuǎn)換到主/備狀態(tài),但這個(gè)命令不會(huì)試圖去停止活動(dòng)節(jié)點(diǎn),所以,盡量少使用它,可以使用hdfs haadmin -failover來(lái)代替。

failover- 在兩個(gè)namenode之間做故障轉(zhuǎn)移。此命令將會(huì)把故障從第一個(gè)轉(zhuǎn)移到第二個(gè)namenode,如果第一個(gè)namenode是“備”狀態(tài),這個(gè)命令會(huì)成功的將第二個(gè)namenode轉(zhuǎn)換到“主”狀態(tài),如果第一個(gè)namenode是“主”狀態(tài),它將會(huì)嘗試把它轉(zhuǎn)換到“備”狀態(tài),它會(huì)使用在之前配置的 dfs.ha.fencing.methods 所有方法列表中從第一個(gè)開(kāi)始,只到成功為止,它才會(huì)把第二個(gè)namenode轉(zhuǎn)換成“主”狀態(tài)。如果所有方法都不能把第一個(gè)namenode轉(zhuǎn)換到“備”狀態(tài),那么第二個(gè)namenode也不能轉(zhuǎn)換成“主”狀態(tài),它將返回一個(gè)錯(cuò)誤信息。

getServiceState- 獲取指定namenode的狀態(tài)。連接到指定的namenode去確定它當(dāng)前的狀態(tài),并打印出出它的狀態(tài)(主或備)。根據(jù)namenode不同的狀態(tài),這個(gè)命令會(huì)使用cron作業(yè)或監(jiān)控腳本來(lái)執(zhí)行。

checkHealth- 檢查指定namenode的健康狀態(tài)。連接到指定的namenode去檢查它的健康狀態(tài),namenode能夠?qū)ψ陨磉M(jìn)行一些診斷,包括檢查內(nèi)部服務(wù)是否按預(yù)期運(yùn)行。如果namenode運(yùn)行正常,它將返回0,否則返回非0的值。這個(gè)命令的唯一用途就是進(jìn)行監(jiān)測(cè)。

注: 當(dāng)前這個(gè)命令還沒(méi)有實(shí)現(xiàn), 除非namenode完成宕機(jī),否則它總是返回成功.

總結(jié)

以上是生活随笔為你收集整理的HDFS HA介绍及配置理解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。