小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

hadoop2—namenode—HA原理詳解

 昵稱31750011 2016-12-16

  在hadoop1中NameNode存在一個(gè)單點(diǎn)故障問題,也就是說如果NameNode所在的機(jī)器發(fā)生故障,那么整個(gè)集群就將不可用(hadoop1中有個(gè)SecorndaryNameNode,但是它并不是NameNode的備份,它只是namenode的一個(gè)助理,協(xié)助namenode工作,對(duì)fsimage和edits文件進(jìn)行合并,并推送給NameNode,防止因edits文件過大,導(dǎo)致NameNode重啟變得很慢),這是hadoop1的不可靠實(shí)現(xiàn)。

在hadoop2中這個(gè)問題得以解決,hadoop2中的高可靠性是指同時(shí)啟動(dòng)NameNode,其中一個(gè)處于工作狀態(tài),一個(gè)處于隨時(shí)待命狀態(tài)。這樣,當(dāng)一個(gè)NameNode所在的服務(wù)器宕機(jī)時(shí),可以在數(shù)據(jù)不丟失的情況下, 手工或者自動(dòng)切換到另一個(gè)NameNode提供服務(wù)。

這些NameNode之間通過共享數(shù)據(jù),保證數(shù)據(jù)的狀態(tài)一致。多個(gè)NameNode之間共享數(shù)據(jù),可以通過Nnetwork File System或者Quorum Journal Node。前者是通過linux共享的文件系統(tǒng),屬于操作系統(tǒng)的配置;后者是hadoop自身的東西,屬于軟件的配置。

我們這里講述使用Quorum Journal Node的配置方式,方式是手工切換。

集群?jiǎn)?dòng)時(shí),可以同時(shí)啟動(dòng)2個(gè)NameNode。這些NameNode只有一個(gè)是active的,另一個(gè)屬于standby狀態(tài)。active狀態(tài)意味著提供服務(wù),standby狀態(tài)意味著處于休眠狀態(tài),只進(jìn)行數(shù)據(jù)同步,時(shí)刻準(zhǔn)備著提供服務(wù),如圖2所示。

圖2

架構(gòu)

在一個(gè)典型的HA集群中,每個(gè)NameNode是一臺(tái)獨(dú)立的服務(wù)器。在任一時(shí)刻,只有一個(gè)NameNode處于active狀態(tài),另一個(gè)處于standby狀態(tài)。其中,active狀態(tài)的NameNode負(fù)責(zé)所有的客戶端操作,standby狀態(tài)的NameNode處于從屬地位,維護(hù)著數(shù)據(jù)狀態(tài),隨時(shí)準(zhǔn)備切換。

兩個(gè)NameNode為了數(shù)據(jù)同步,會(huì)通過一組稱作JournalNodes的獨(dú)立進(jìn)程進(jìn)行相互通信。當(dāng)active狀態(tài)的NameNode的命名空間有任何修改時(shí),會(huì)告知大部分的JournalNodes進(jìn)程。standby狀態(tài)的NameNode有能力讀取JNs中的變更信息,并且一直監(jiān)控edit log的變化,把變化應(yīng)用于自己的命名空間。standby可以確保在集群出錯(cuò)時(shí),命名空間狀態(tài)已經(jīng)完全同步了,如圖3所示。

圖3

為了確??焖偾袚Q,standby狀態(tài)的NameNode有必要知道集群中所有數(shù)據(jù)塊的位置。為了做到這點(diǎn),所有的datanodes必須配置兩個(gè)NameNode的地址,發(fā)送數(shù)據(jù)塊位置信息和心跳給他們兩個(gè)。

對(duì)于HA集群而言,確保同一時(shí)刻只有一個(gè)NameNode處于active狀態(tài)是至關(guān)重要的。否則,兩個(gè)NameNode的數(shù)據(jù)狀態(tài)就會(huì)產(chǎn)生分歧,可能丟失數(shù)據(jù),或者產(chǎn)生錯(cuò)誤的結(jié)果。為了保證這點(diǎn),JNs必須確保同一時(shí)刻只有一個(gè)NameNode可以向自己寫數(shù)據(jù)。

硬件資源

為了部署HA集群,應(yīng)該準(zhǔn)備以下事情:

* NameNode服務(wù)器:運(yùn)行NameNode的服務(wù)器應(yīng)該有相同的硬件配置。

* JournalNode服務(wù)器:運(yùn)行的JournalNode進(jìn)程非常輕量,可以部署在其他的服務(wù)器上。注意:必須允許至少3個(gè)節(jié)點(diǎn)。當(dāng)然可以運(yùn)行更多,但是必須是奇數(shù)個(gè),如3、5、7、9個(gè)等等。當(dāng)運(yùn)行N個(gè)節(jié)點(diǎn)時(shí),系統(tǒng)可以容忍至少(N-1)/2個(gè)節(jié)點(diǎn)失敗而不影響正常運(yùn)行。

在HA集群中,standby狀態(tài)的NameNode可以完成checkpoint操作,因此沒必要配置Secondary NameNode、CheckpointNode、BackupNode。如果真的配置了,還會(huì)報(bào)錯(cuò)。

配置

HA集群需要使用nameservice ID區(qū)分一個(gè)HDFS集群。另外,HA中還要使用一個(gè)詞,叫做NameNode ID。同一個(gè)集群中的不同NameNode,使用不同的NameNode ID區(qū)分。為了支持所有NameNode使用相同的配置文件,因此在配置參數(shù)中,需要把“nameservice ID”作為NameNode ID的前綴。

HA配置內(nèi)容是在文件hdfs-site.xml中的。下面介紹關(guān)鍵配置項(xiàng)。

dfs.nameservices   命名空間的邏輯名稱。如果使用HDFS Federation,可以配置多個(gè)命名空間的名稱,使用逗號(hào)分開即可。

<property> <name>dfs.nameservices</name> <value>mycluster</value> </property>

dfs.ha.namenodes.[nameservice ID]   命名空間中所有NameNode的唯一標(biāo)示名稱??梢耘渲枚鄠€(gè),使用逗號(hào)分隔。該名稱是可以讓DataNode知道每個(gè)集群的所有NameNode。當(dāng)前,每個(gè)集群最多只能配置兩個(gè)NameNode。

<property> <name>dfs.ha.namenodes.mycluster</name> <value>nn1,nn2</value> </property>

dfs.namenode.rpc-address.[nameservice ID].[name node ID]   每個(gè)namenode監(jiān)聽的RPC地址。如下所示

<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>

dfs.namenode.http-address.[nameservice ID].[name node ID]   每個(gè)namenode監(jiān)聽的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>

如果啟用了安全策略,也應(yīng)該對(duì)每個(gè)namenode配置htts-address信息,與此類似。

dfs.namenode.shared.edits.dir   這是NameNode讀寫JNs組的uri。通過這個(gè)uri,NameNodes可以讀寫edit log內(nèi)容。URI的格式'qjournal://host1:port1;host2:port2;host3:port3/journalId'。這里的host1、host2、host3指的是Journal Node的地址,這里必須是奇數(shù)個(gè),至少3個(gè);其中journalId是集群的唯一標(biāo)識(shí)符,對(duì)于多個(gè)聯(lián)邦命名空間,也使用同一個(gè)journalId。配置如下

<property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://node1.example.com:8485;node2.example.com:8485;node3.example.com:8485/mycluster</value> </property>

這里配置HDFS客戶端連接到Active NameNode的一個(gè)java類

<property> <name>dfs.client.failover.proxy.provider.mycluster</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property>

dfs.ha.fencing.methods配置active namenode出錯(cuò)時(shí)的處理類。當(dāng)active namenode出錯(cuò)時(shí),一般需要關(guān)閉該進(jìn)程。處理方式可以是ssh也可以是shell。

如果使用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>
這種方法配置簡(jiǎn)單,推薦使用。

fs.defaultFS客戶端連接HDFS時(shí),默認(rèn)的路徑前綴。如果前面配置了nameservice ID的值是mycluster,那么這里可以配置為授權(quán)信息的一部分

可以在core-site.xml中配置如下

<property> <name>fs.defaultFS</name> <value>hdfs://mycluster</value> </property>
dfs.journalnode.edits.dir這是JournalNode進(jìn)程保持邏輯狀態(tài)的路徑。這是在linux服務(wù)器文件的絕對(duì)路徑。
配置如下
<property> <name>dfs.journalnode.edits.dir</name> <value>/path/to/journal/node/local/data</value> </property>

部署

以上配置完成后,就可以啟動(dòng)JournalNode進(jìn)程了。在各個(gè)JournalNode機(jī)器上執(zhí)行命令“hadoop-daemon.sh  journalnode”。

如果是一個(gè)新的HDFS集群,還要首先執(zhí)行格式化命令“hdfs  namenode  -format”,緊接著啟動(dòng)本NameNode進(jìn)程。

如果存在一個(gè)已經(jīng)格式化過的NameNode,并且已經(jīng)啟動(dòng)了。那么應(yīng)該把該NameNode的數(shù)據(jù)同步到另一個(gè)沒有格式化的NameNode。在未格式化過的NameNode上執(zhí)行命令“hdfs  namenode  -bootstrapStandby”。

如果是把一個(gè)非HA集群轉(zhuǎn)成HA集群,應(yīng)該運(yùn)行命令“hdfs –initializeSharedEdits”,這會(huì)初始化JournalNode中的數(shù)據(jù)。

做了這些事情后,就可以啟動(dòng)兩個(gè)NameNode了。啟動(dòng)成功后,通過web頁面觀察兩個(gè)NameNode的狀態(tài),都是standby。

下面執(zhí)行命令“hdfs  haadmin  -failover  --forcefence  serviceId   serviceId2”。就會(huì)把NameNode的狀態(tài)進(jìn)行安全的切換。其中后面一個(gè)會(huì)變?yōu)閍ctive狀態(tài)。這時(shí)候再通過web頁面觀察就能看到正確結(jié)果了

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多