激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

云服務(wù)器|WEB服務(wù)器|FTP服務(wù)器|郵件服務(wù)器|虛擬主機(jī)|服務(wù)器安全|DNS服務(wù)器|服務(wù)器知識(shí)|Nginx|IIS|Tomcat|

服務(wù)器之家 - 服務(wù)器技術(shù) - 服務(wù)器知識(shí) - 基于 ZooKeeper 搭建 Hadoop 高可用集群 的教程圖解

基于 ZooKeeper 搭建 Hadoop 高可用集群 的教程圖解

2020-07-28 18:32heibaiying 服務(wù)器知識(shí)

Hadoop 高可用 (High Availability) 分為 HDFS 高可用和 YARN 高可用,兩者的實(shí)現(xiàn)基本類似,但 HDFS NameNode 對(duì)數(shù)據(jù)存儲(chǔ)及其一致性的要求比 YARN ResourceManger 高得多,所以它的實(shí)現(xiàn)也更加復(fù)雜,下面給大家詳細(xì)介紹,感興趣的一起看看吧

一、高可用簡(jiǎn)介

 

hadoop 高可用 (high availability) 分為 hdfs 高可用和 yarn 高可用,兩者的實(shí)現(xiàn)基本類似,但 hdfs namenode 對(duì)數(shù)據(jù)存儲(chǔ)及其一致性的要求比 yarn resourcemanger 高得多,所以它的實(shí)現(xiàn)也更加復(fù)雜,故下面先進(jìn)行講解:

1.1 高可用整體架構(gòu)

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

基于 ZooKeeper 搭建 Hadoop 高可用集群 的教程圖解

圖片引用自:https://www.edureka.co/blog/how-to-set-up-hadoop-cluster-with-hdfs-high-availability/

hdfs 高可用架構(gòu)主要由以下組件所構(gòu)成:

  • active namenode 和 standby namenode:兩臺(tái) namenode 形成互備,一臺(tái)處于 active 狀態(tài),為主 namenode,另外一臺(tái)處于 standby 狀態(tài),為備 namenode,只有主 namenode 才能對(duì)外提供讀寫服務(wù)。
  • 主備切換控制器 zkfailovercontroller:zkfailovercontroller 作為獨(dú)立的進(jìn)程運(yùn)行,對(duì) namenode 的主備切換進(jìn)行總體控制。zkfailovercontroller 能及時(shí)檢測(cè)到 namenode 的健康狀況,在主 namenode 故障時(shí)借助 zookeeper 實(shí)現(xiàn)自動(dòng)的主備選舉和切換,當(dāng)然 namenode 目前也支持不依賴于 zookeeper 的手動(dòng)主備切換。
  • zookeeper 集群:為主備切換控制器提供主備選舉支持。
  • 共享存儲(chǔ)系統(tǒng):共享存儲(chǔ)系統(tǒng)是實(shí)現(xiàn) namenode 的高可用最為關(guān)鍵的部分,共享存儲(chǔ)系統(tǒng)保存了 namenode 在運(yùn)行過(guò)程中所產(chǎn)生的 hdfs 的元數(shù)據(jù)。主 namenode 和 namenode 通過(guò)共享存儲(chǔ)系統(tǒng)實(shí)現(xiàn)元數(shù)據(jù)同步。在進(jìn)行主備切換的時(shí)候,新的主 namenode 在確認(rèn)元數(shù)據(jù)完全同步之后才能繼續(xù)對(duì)外提供服務(wù)。
  • datanode 節(jié)點(diǎn):除了通過(guò)共享存儲(chǔ)系統(tǒng)共享 hdfs 的元數(shù)據(jù)信息之外,主 namenode 和備 namenode 還需要共享 hdfs 的數(shù)據(jù)塊和 datanode 之間的映射關(guān)系。datanode 會(huì)同時(shí)向主 namenode 和備 namenode 上報(bào)數(shù)據(jù)塊的位置信息。

1.2 基于 qjm 的共享存儲(chǔ)系統(tǒng)的數(shù)據(jù)同步機(jī)制分析

目前 hadoop 支持使用 quorum journal manager (qjm) 或 network file system (nfs) 作為共享的存儲(chǔ)系統(tǒng),這里以 qjm 集群為例進(jìn)行說(shuō)明:active namenode 首先把 editlog 提交到 journalnode 集群,然后 standby namenode 再?gòu)?journalnode 集群定時(shí)同步 editlog,當(dāng) active namenode 宕機(jī)后, standby namenode 在確認(rèn)元數(shù)據(jù)完全同步之后就可以對(duì)外提供服務(wù)。

需要說(shuō)明的是向 journalnode 集群寫入 editlog 是遵循 “過(guò)半寫入則成功” 的策略,所以你至少要有3個(gè) journalnode 節(jié)點(diǎn),當(dāng)然你也可以繼續(xù)增加節(jié)點(diǎn)數(shù)量,但是應(yīng)該保證節(jié)點(diǎn)總數(shù)是奇數(shù)。同時(shí)如果有 2n+1 臺(tái) journalnode,那么根據(jù)過(guò)半寫的原則,最多可以容忍有 n 臺(tái) journalnode 節(jié)點(diǎn)掛掉。

基于 ZooKeeper 搭建 Hadoop 高可用集群 的教程圖解

1.3 namenode 主備切換

namenode 實(shí)現(xiàn)主備切換的流程下圖所示:

基于 ZooKeeper 搭建 Hadoop 高可用集群 的教程圖解
  1. healthmonitor 初始化完成之后會(huì)啟動(dòng)內(nèi)部的線程來(lái)定時(shí)調(diào)用對(duì)應(yīng) namenode 的 haserviceprotocol rpc 接口的方法,對(duì) namenode 的健康狀態(tài)進(jìn)行檢測(cè)。

  2. healthmonitor 如果檢測(cè)到 namenode 的健康狀態(tài)發(fā)生變化,會(huì)回調(diào) zkfailovercontroller 注冊(cè)的相應(yīng)方法進(jìn)行處理。

  3. 如果 zkfailovercontroller 判斷需要進(jìn)行主備切換,會(huì)首先使用 activestandbyelector 來(lái)進(jìn)行自動(dòng)的主備選舉。

  4. activestandbyelector 與 zookeeper 進(jìn)行交互完成自動(dòng)的主備選舉。

  5. activestandbyelector 在主備選舉完成后,會(huì)回調(diào) zkfailovercontroller 的相應(yīng)方法來(lái)通知當(dāng)前的 namenode 成為主 namenode 或備 namenode。

  6. zkfailovercontroller 調(diào)用對(duì)應(yīng) namenode 的 haserviceprotocol rpc 接口的方法將 namenode 轉(zhuǎn)換為 active 狀態(tài)或 standby 狀態(tài)。

1.4 yarn高可用

yarn resourcemanager 的高可用與 hdfs namenode 的高可用類似,但是 resourcemanager 不像 namenode ,沒(méi)有那么多的元數(shù)據(jù)信息需要維護(hù),所以它的狀態(tài)信息可以直接寫到 zookeeper 上,并依賴 zookeeper 來(lái)進(jìn)行主備選舉。

基于 ZooKeeper 搭建 Hadoop 高可用集群 的教程圖解

二、集群規(guī)劃

 

按照高可用的設(shè)計(jì)目標(biāo):需要保證至少有兩個(gè) namenode (一主一備) 和 兩個(gè) resourcemanager (一主一備) ,同時(shí)為滿足“過(guò)半寫入則成功”的原則,需要至少要有3個(gè) journalnode 節(jié)點(diǎn)。這里使用三臺(tái)主機(jī)進(jìn)行搭建,集群規(guī)劃如下:

基于 ZooKeeper 搭建 Hadoop 高可用集群 的教程圖解

三、前置條件

 

四、集群配置

 

4.1 下載并解壓

下載hadoop。這里我下載的是cdh版本hadoop,下載地址為:http://archive.cloudera.com/cdh5/cdh/5/

?
1
# tar -zvxf hadoop-2.6.0-cdh5.15.2.tar.gz

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

編輯profile文件:

?
1
# vim /etc/profile

增加如下配置:

?
1
2
export hadoop_home=/usr/app/hadoop-2.6.0-cdh5.15.2
export  path=${hadoop_home}/bin:$path

執(zhí)行source命令,使得配置立即生效:

?
1
# source /etc/profile

4.3 修改配置

進(jìn)入${hadoop_home}/etc/hadoop目錄下,修改配置文件。各個(gè)配置文件內(nèi)容如下:

1. hadoop-env.sh

?
1
2
# 指定jdk的安裝位置
export java_home=/usr/java/jdk1.8.0_201/

2. core-site.xml

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<configuration>
    <property>
        <!-- 指定namenode的hdfs協(xié)議文件系統(tǒng)的通信地址 -->
        <name>fs.defaultfs</name>
        <value>hdfs://hadoop001:8020</value>
    </property>
    <property>
        <!-- 指定hadoop集群存儲(chǔ)臨時(shí)文件的目錄 -->
        <name>hadoop.tmp.dir</name>
        <value>/home/hadoop/tmp</value>
    </property>
    <property>
        <!-- zookeeper集群的地址 -->
        <name>ha.zookeeper.quorum</name>
        <value>hadoop001:2181,hadoop002:2181,hadoop002:2181</value>
    </property>
    <property>
        <!-- zkfc連接到zookeeper超時(shí)時(shí)長(zhǎng) -->
        <name>ha.zookeeper.session-timeout.ms</name>
        <value>10000</value>
    </property>
</configuration>

3. hdfs-site.xml

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<configuration>
    <property>
        <!-- 指定hdfs副本的數(shù)量 -->
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <property>
        <!-- namenode節(jié)點(diǎn)數(shù)據(jù)(即元數(shù)據(jù))的存放位置,可以指定多個(gè)目錄實(shí)現(xiàn)容錯(cuò),多個(gè)目錄用逗號(hào)分隔 -->
        <name>dfs.namenode.name.dir</name>
        <value>/home/hadoop/namenode/data</value>
    </property>
    <property>
        <!-- datanode節(jié)點(diǎn)數(shù)據(jù)(即數(shù)據(jù)塊)的存放位置 -->
        <name>dfs.datanode.data.dir</name>
        <value>/home/hadoop/datanode/data</value>
    </property>
    <property>
        <!-- 集群服務(wù)的邏輯名稱 -->
        <name>dfs.nameservices</name>
        <value>mycluster</value>
    </property>
    <property>
        <!-- namenode id列表-->
        <name>dfs.ha.namenodes.mycluster</name>
        <value>nn1,nn2</value>
    </property>
    <property>
        <!-- nn1的rpc通信地址 -->
        <name>dfs.namenode.rpc-address.mycluster.nn1</name>
        <value>hadoop001:8020</value>
    </property>
    <property>
        <!-- nn2的rpc通信地址 -->
        <name>dfs.namenode.rpc-address.mycluster.nn2</name>
        <value>hadoop002:8020</value>
    </property>
    <property>
        <!-- nn1的http通信地址 -->
        <name>dfs.namenode.http-address.mycluster.nn1</name>
        <value>hadoop001:50070</value>
    </property>
    <property>
        <!-- nn2的http通信地址 -->
        <name>dfs.namenode.http-address.mycluster.nn2</name>
        <value>hadoop002:50070</value>
    </property>
    <property>
        <!-- namenode元數(shù)據(jù)在journalnode上的共享存儲(chǔ)目錄 -->
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://hadoop001:8485;hadoop002:8485;hadoop003:8485/mycluster</value>
    </property>
    <property>
        <!-- journal edit files的存儲(chǔ)目錄 -->
        <name>dfs.journalnode.edits.dir</name>
        <value>/home/hadoop/journalnode/data</value>
    </property>
    <property>
        <!-- 配置隔離機(jī)制,確保在任何給定時(shí)間只有一個(gè)namenode處于活動(dòng)狀態(tài) -->
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
    </property>
    <property>
        <!-- 使用sshfence機(jī)制時(shí)需要ssh免密登錄 -->
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/root/.ssh/id_rsa</value>
    </property>
    <property>
        <!-- ssh超時(shí)時(shí)間 -->
        <name>dfs.ha.fencing.ssh.connect-timeout</name>
        <value>30000</value>
    </property>
    <property>
        <!-- 訪問(wèn)代理類,用于確定當(dāng)前處于active狀態(tài)的namenode -->
        <name>dfs.client.failover.proxy.provider.mycluster</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.configuredfailoverproxyprovider</value>
    </property>
    <property>
        <!-- 開啟故障自動(dòng)轉(zhuǎn)移 -->
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
</configuration>

4. yarn-site.xml

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<configuration>
    <property>
        <!--配置nodemanager上運(yùn)行的附屬服務(wù)。需要配置成mapreduce_shuffle后才可以在yarn上運(yùn)行mapreduce程序。-->
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <!-- 是否啟用日志聚合(可選) -->
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    <property>
        <!-- 聚合日志的保存時(shí)間(可選) -->
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>86400</value>
    </property>
    <property>
        <!-- 啟用rm ha -->
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
    <property>
        <!-- rm集群標(biāo)識(shí) -->
        <name>yarn.resourcemanager.cluster-id</name>
        <value>my-yarn-cluster</value>
    </property>
    <property>
        <!-- rm的邏輯id列表 -->
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>
    <property>
        <!-- rm1的服務(wù)地址 -->
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>hadoop002</value>
    </property>
    <property>
        <!-- rm2的服務(wù)地址 -->
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>hadoop003</value>
    </property>
    <property>
        <!-- rm1 web應(yīng)用程序的地址 -->
        <name>yarn.resourcemanager.webapp.address.rm1</name>
        <value>hadoop002:8088</value>
    </property>
    <property>
        <!-- rm2 web應(yīng)用程序的地址 -->
        <name>yarn.resourcemanager.webapp.address.rm2</name>
        <value>hadoop003:8088</value>
    </property>
    <property>
        <!-- zookeeper集群的地址 -->
        <name>yarn.resourcemanager.zk-address</name>
        <value>hadoop001:2181,hadoop002:2181,hadoop003:2181</value>
    </property>
    <property>
        <!-- 啟用自動(dòng)恢復(fù) -->
        <name>yarn.resourcemanager.recovery.enabled</name>
        <value>true</value>
    </property>
    <property>
        <!-- 用于進(jìn)行持久化存儲(chǔ)的類 -->
        <name>yarn.resourcemanager.store.class</name>
        <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.zkrmstatestore</value>
    </property>
</configuration>

5. mapred-site.xml

?
1
2
3
4
5
6
7
<configuration>
    <property>
        <!--指定mapreduce作業(yè)運(yùn)行在yarn上-->
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

5. slaves

配置所有從屬節(jié)點(diǎn)的主機(jī)名或ip地址,每行一個(gè)。所有從屬節(jié)點(diǎn)上的datanode服務(wù)和nodemanager服務(wù)都會(huì)被啟動(dòng)。

?
1
2
3
hadoop001
hadoop002
hadoop003

4.4 分發(fā)程序

將hadoop安裝包分發(fā)到其他兩臺(tái)服務(wù)器,分發(fā)后建議在這兩臺(tái)服務(wù)器上也配置一下hadoop的環(huán)境變量。

?
1
2
3
4
# 將安裝包分發(fā)到hadoop002
scp -r /usr/app/hadoop-2.6.0-cdh5.15.2/  hadoop002:/usr/app/
# 將安裝包分發(fā)到hadoop003
scp -r /usr/app/hadoop-2.6.0-cdh5.15.2/  hadoop003:/usr/app/

五、啟動(dòng)集群

 

5.1 啟動(dòng)zookeeper

分別到三臺(tái)服務(wù)器上啟動(dòng)zookeeper服務(wù):

?
1
zkserver.sh start

5.2 啟動(dòng)journalnode

分別到三臺(tái)服務(wù)器的的${hadoop_home}/sbin目錄下,啟動(dòng)journalnode進(jìn)程:

?
1
hadoop-daemon.sh start journalnode

5.3 初始化namenode

hadop001上執(zhí)行namenode初始化命令:

?
1
hdfs namenode -format

執(zhí)行初始化命令后,需要將namenode元數(shù)據(jù)目錄的內(nèi)容,復(fù)制到其他未格式化的namenode上。元數(shù)據(jù)存儲(chǔ)目錄就是我們?cè)?code>hdfs-site.xml中使用dfs.namenode.name.dir屬性指定的目錄。這里我們需要將其復(fù)制到hadoop002上:

?
1
scp -r /home/hadoop/namenode/data hadoop002:/home/hadoop/namenode/

5.4 初始化ha狀態(tài)

在任意一臺(tái)namenode上使用以下命令來(lái)初始化zookeeper中的ha狀態(tài):

?
1
hdfs zkfc -formatzk

5.5 啟動(dòng)hdfs

進(jìn)入到hadoop001${hadoop_home}/sbin目錄下,啟動(dòng)hdfs。此時(shí)hadoop001hadoop002上的namenode服務(wù),和三臺(tái)服務(wù)器上的datanode服務(wù)都會(huì)被啟動(dòng):

?
1
start-dfs.sh

5.6 啟動(dòng)yarn

進(jìn)入到hadoop002${hadoop_home}/sbin目錄下,啟動(dòng)yarn。此時(shí)hadoop002上的resourcemanager服務(wù),和三臺(tái)服務(wù)器上的nodemanager服務(wù)都會(huì)被啟動(dòng):

?
1
start-yarn.sh

需要注意的是,這個(gè)時(shí)候hadoop003上的resourcemanager服務(wù)通常是沒(méi)有啟動(dòng)的,需要手動(dòng)啟動(dòng):

?
1
yarn-daemon.sh start resourcemanager

六、查看集群

 

6.1 查看進(jìn)程

成功啟動(dòng)后,每臺(tái)服務(wù)器上的進(jìn)程應(yīng)該如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[root@hadoop001 sbin]# jps
4512 dfszkfailovercontroller
3714 journalnode
4114 namenode
3668 quorumpeermain
5012 datanode
4639 nodemanager
 
 
[root@hadoop002 sbin]# jps
4499 resourcemanager
4595 nodemanager
3465 quorumpeermain
3705 namenode
3915 dfszkfailovercontroller
5211 datanode
3533 journalnode
 
 
[root@hadoop003 sbin]# jps
3491 journalnode
3942 nodemanager
4102 resourcemanager
4201 datanode
3435 quorumpeermain

6.2 查看web ui

hdfs和yarn的端口號(hào)分別為500708080,界面應(yīng)該如下:

此時(shí)hadoop001上的namenode處于可用狀態(tài):

基于 ZooKeeper 搭建 Hadoop 高可用集群 的教程圖解

而hadoop002上的namenode則處于備用狀態(tài):

 

基于 ZooKeeper 搭建 Hadoop 高可用集群 的教程圖解

 

hadoop002上的resourcemanager處于可用狀態(tài):

 

基于 ZooKeeper 搭建 Hadoop 高可用集群 的教程圖解

 

hadoop003上的resourcemanager則處于備用狀態(tài):

 

基于 ZooKeeper 搭建 Hadoop 高可用集群 的教程圖解

 

同時(shí)界面上也有journal manager的相關(guān)信息:

 

基于 ZooKeeper 搭建 Hadoop 高可用集群 的教程圖解

七、集群的二次啟動(dòng)

 

上面的集群初次啟動(dòng)涉及到一些必要初始化操作,所以過(guò)程略顯繁瑣。但是集群一旦搭建好后,想要再次啟用它是比較方便的,步驟如下(首選需要確保zookeeper集群已經(jīng)啟動(dòng)):

hadoop001啟動(dòng) hdfs,此時(shí)會(huì)啟動(dòng)所有與 hdfs 高可用相關(guān)的服務(wù),包括 namenode,datanode 和 journalnode:

?
1
start-dfs.sh

hadoop002啟動(dòng)yarn:

?
1
start-yarn.sh

這個(gè)時(shí)候hadoop003上的resourcemanager服務(wù)通常還是沒(méi)有啟動(dòng)的,需要手動(dòng)啟動(dòng):

?
1
yarn-daemon.sh start resourcemanager

參考資料

 

以上搭建步驟主要參考自官方文檔:

總結(jié)

以上所述是小編給大家介紹的基于 ZooKeeper 搭建 高可用集群 的教程圖解,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)服務(wù)器之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

原文鏈接:https://www.cnblogs.com/heibaiying/archive/2019/06/23/11071857.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品高潮99久久久久久久 | 亚洲一级片在线观看 | 性猛交ⅹxxx乱巴西 在线播放中文 | 国产羞羞网站 | 欧洲黄视频 | 黄色免费小视频网站 | 国产免费永久在线观看 | 高清一区二区在线观看 | 中文字幕亚洲一区二区三区 | 亚洲影院在线 | 男女羞羞的视频 | 羞羞的视频免费在线观看 | 性欧美一区二区 | 成人一区二区三区在线 | 日韩精品免费看 | 黄色毛片前黄 | 久久精品视频6 | 国产88久久久国产精品免费二区 | 国产精品无码久久久久 | 亚洲九九色 | 久久久久久艹 | 亚洲一级片在线观看 | 香蕉国产精品 | 黄视频免费在线观看 | 欧美三级欧美成人高清www | 中文字幕在线观看成人 | 成人精品久久 | 蜜桃网站在线观看 | 亚洲性爰 | 日本黄色大片免费 | 成人免费毛片一 | 日韩黄a| 久久免费综合视频 | 97伦理| 精品国产91久久久久久久妲己 | 一区二区三区在线观看国产 | 麻豆一区二区99久久久久 | 在线91视频| 国产青草视频在线观看 | 黄色免费大片 | 在线播放污 |