中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

hadoop的HA

發布時間:2020-06-21 01:06:32 來源:網絡 閱讀:346 作者:原生zzy 欄目:大數據

1. 為什么要搭建HA?

??在hadoop2.x之前,在HDFS 集群中NameNode 存在單點故障 (SPOF:A Single Point of Failure)。對于只有一個 NameNode 的集群,如果 NameNode 機器出現故障(比如宕機或是軟件、硬件升級),那么整個集群將無法使用,必須等到 NameNode 重新啟動,之后才能對外提供服務,這個方式在生成環境中是絕對不允許出現的。
??HDFS 的 HA:通過配置 Active/Standby 兩個 NameNodes 實現在集群中對 NameNode 的熱備來解決上述問題。如果出現故障,如機器崩潰或機器需要升級維護,這時可通過此種方式將 NameNode 很快的切換到另外一臺機器。

2. HA的工作原理?

hadoop的HA
解釋(數據一致以及持久化問題):

  • 當hdfs客戶端連接namenode時,namenode啟動時,會向JN集群提交edtis log(操作記錄日志)。
  • 此時在JN集群中,當有一半的集群服務成功的接收到了消息,然后返回給namenode,這就表示edits log上傳成功。
  • 此時NameNode(standBy),需要從JN集群取回元數據信息,然后整合新的fsimage,然后推送回NameNode(active)
  • 在NameNode(standBy)向JN索要數據的時候,首先在JN中會查看是否有宕機的機器,采用過半機制(當集群中有部分服務器宕機時,此時集群會將大部分可以使用的機器作為主,其他的機器全部停止服務),去向備機(standBy)提供對外的數據傳輸。
  • 在解決block 塊信息時,此時datanode會向兩臺namenode都發送block 塊信息。
    解釋(解決主備切換問題):
  • 此時需要使用到另外一個集群zookeeper,zookeeper集群是一個高可用的集群,它的實現機制是,首先是一個服務器提供對外的服務,其他的機器是備機,當主機壞了的時候,此時zookeeper集群中采取投票機制(邏輯時鐘,ID號,以及數據的更新程度),選出新的主。
  • 此時ZKFC務控制線程一直手抓住了zookeeper集群,另一只手抓住了NameNode。
    • 抓住NameNode(active)的服務控制,監控NameNode(active)的狀態,實時的向zookeeper集群匯報。
    • 住NameNode(standBy)的服務控制,接收zookeeper集群發送的信息,如果發送過來的信息,表示主NameNode已停止服務,立刻調用服務控制中的回調函數,讓NameNode(standBy)變成主機繼續提供服務。
  • ? 以上的作用是一個和keeplive相同的作用,使用zookeeper不同之處在于,如果服務控制處出現進程的異常退出時,此時通過zookeeper集群會將備機改為active狀態,此時主機可能還是active,就造成了兩臺active的NameNode。在zookeeper中是這樣解決的:當有一個服務控制進程異常退出后,他會有一只無形的手去連接另外一臺NameNode,并且在可控的范圍內,將其變成主(active),而將自己無法控制的那臺NameNode,變成備機。

    3. HA的集群搭建?

    搭建集群前的準備:https://blog.51cto.com/14048416/2341450
    zookeeper集群的搭建:https://blog.51cto.com/14048416/2336178

    1)集群的規劃

    hadoop的HA

    2)具體安裝步驟:

    1)上傳安裝包 hadoop-2.6.5-centos-6.7.tar.gz
    2)解壓到對應的安裝目錄

    [hadoop@hadoop01 ~]$tar -zxvf hadoop-2.6.5-centos-6.7.tar.gz -C /home/hadoop/apps/

    3)修改配置文件

    hadoo-env.sh:
    加入:export JAVA_HOME= /usr/local/jdk1.8.0_73

core-site.xml

<configuration>
<!-- 指定 hdfs 的 nameservice 為 myha01 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://myha01/</value>
</property>
<!-- 指定 hadoop 工作目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/data/hadoopdata/</value>
</property>
<!-- 指定 zookeeper 集群訪問地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
</configuration>

hdfs-site.xml

<configuration>
<!-- 指定副本數 -->
<property>
 <name>dfs.replication</name>
 <value>3</value>
</property>
<!--指定 hdfs 的 nameservice 為 myha01,需要和 core-site.xml 中保持一致-->
<property>
 <name>dfs.nameservices</name>
 <value>myha01</value>
</property>
<!-- myha01 下面有兩個 NameNode,分別是 nn1,nn2 -->
<property>
 <name>dfs.ha.namenodes.myha01</name>
 <value>nn1,nn2</value>
</property>
<!-- nn1 的 RPC 通信地址 -->
<property>
 <name>dfs.namenode.rpc-address.myha01.nn1</name>
 <value>hadoop01:9000</value>
</property>
<!-- nn1 的 http 通信地址 -->
<property>
 <name>dfs.namenode.http-address.myha01.nn1</name>
 <value>hadoop01:50070</value>
</property>
<!-- nn2 的 RPC 通信地址 -->
<property>
 <name>dfs.namenode.rpc-address.myha01.nn2</name>
 <value>hadoop02:9000</value>
</property>
<!-- nn2 的 http 通信地址 -->
<property>
 <name>dfs.namenode.http-address.myha01.nn2</name>
 <value>hadoop02:50070</value>
</property>
<!-- 指定 NameNode 的 edits 元數據在 JournalNode 上的存放位置 -->
<property>
 <name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/myha01</value>
</property>
<!-- 指定 JournalNode 在本地磁盤存放數據的位置 -->
<property>
 <name>dfs.journalnode.edits.dir</name>
 <value>/home/hadoop/data/journaldata</value>
</property>
<!-- 開啟 NameNode 失敗自動切換 -->
<property>
 <name>dfs.ha.automatic-failover.enabled</name>
 <value>true</value>
</property>
<!-- 配置失敗自動切換實現方式 -->
<!-- 此處配置在安裝的時候切記檢查不要換行-->
<property>
 <name>dfs.client.failover.proxy.provider.myha01</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverPr
oxyProvider</value>
</property>
<!-- 配置隔離機制方法,多個機制用換行分割,即每個機制暫用一行-->
<property>
 <name>dfs.ha.fencing.methods</name>
 <value>
 sshfence
 shell(/bin/true)
 </value>
</property>
<!-- 使用 sshfence 隔離機制時需要 ssh 免登陸 -->
<property>
 <name>dfs.ha.fencing.ssh.private-key-files</name>
 <value>/home/hadoop/.ssh/id_rsa</value>
</property>
<!-- 配置 sshfence 隔離機制超時時間 -->
<property>
 <name>dfs.ha.fencing.ssh.connect-timeout</name>
 <value>30000</value>
</property>
</configuration>

mapred-site.xml

<configuration>
<!-- 指定 mr 框架為 yarn 方式 -->
<property>
 <name>mapreduce.framework.name</name>
 <value>yarn</value>
</property>
<!-- 設置 mapreduce 的歷史服務器地址和端口號 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop02:10020</value>
</property>
<!-- mapreduce 歷史服務器的 web 訪問地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop02:19888</value>
</property>
</configuration>

yarn-site.xml

<configuration>
<!-- 開啟 RM 高可用 -->
<property>
 <name>yarn.resourcemanager.ha.enabled</name>
 <value>true</value>
</property>
<!-- 指定 RM 的 cluster id -->
<property>
 <name>yarn.resourcemanager.cluster-id</name>
 <value>yrc</value>
</property>
<!-- 指定 RM 的名字 -->
<property>
 <name>yarn.resourcemanager.ha.rm-ids</name>
 <value>rm1,rm2</value>
</property>
<!-- 分別指定 RM 的地址 -->
<property>
 <name>yarn.resourcemanager.hostname.rm1</name>
 <value>hadoop01</value>
</property>
<property>
 <name>yarn.resourcemanager.hostname.rm2</name>
 <value>hadoop02</value>
</property>
<!-- 指定 zk 集群地址 -->
<property>
 <name>yarn.resourcemanager.zk-address</name>
 <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
<!-- 要運行 MapReduce 程序必須配置的附屬服務 -->
<property>
 <name>yarn.nodemanager.aux-services</name>
 <value>mapreduce_shuffle</value>
</property>
<!-- 開啟 YARN 集群的日志聚合功能 -->
<property>
 <name>yarn.log-aggregation-enable</name>
 <value>true</value>
</property>
<!-- YARN 集群的聚合日志最長保留時長 -->
<property>
 <name>yarn.log-aggregation.retain-seconds</name>
 <value>86400</value>
</property>
<!-- 啟用自動恢復 -->
<property>
 <name>yarn.resourcemanager.recovery.enabled</name>
 <value>true</value>
</property>
<!-- 制定 resourcemanager 的狀態信息存儲在 zookeeper 集群上-->
<property>
 <name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
</configuration>

slaves

hadoop01
hadoop02
hadoop03
4)分發安裝包到其他機器

[hadoop@hadoop01 apps]$scp -r hadoop-2.6.5 hadoop@hadoop02:$PWD
[hadoop@hadoop01 apps]$scp -r hadoop-2.6.5 hadoop@hadoop03:$PWD

5)分別配置環境變量

[hadoop@hadoop01 apps]$ vi ~/.bashrc
添加兩行:

export HADOOP_HOME=/home/hadoop/apps/hadoop-2.6.5
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

[hadoop@hadoop01 apps]$ source ~/.bashrc

6)集群初始化操作

先啟動 zookeeper 集群
啟動:zkServer.sh start
檢查啟動是否正常:zkServer.sh status
啟動 journalnode 進程
[hadoop@hadoop01 ~]$ hadoop-daemon.sh start journalnode
[hadoop@hadoop02 ~]$ hadoop-daemon.sh start journalnode
[hadoop@hadoop03 ~]$ hadoop-daemon.sh start journalnode
然后用 jps 命令查看是否各個 datanode 節點上都啟動了 journalnode 進程
在第一個 namenode 上執行格式化操作
[hadoop@hadoop01 ~]$ hadoop namenode -format
hadoop的HA
然后會在 core-site.xml 中配置的臨時目錄中生成一些集群的信息把他拷貝的第二個 namenode 的相同目錄下
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/data/hadoopdata/</value>
兩個 namenode 節點該目錄中的數據結構是一致的
[hadoop@hadoop01 ~]$ scp -r ~/data/hadoopdata/ hadoop03:~/data
或者在另一個namenode節點上使用:hadoop namenode -bootstrapStandby
格式化 ZKFC(在一臺集群上格式化即可):
[hadoop@hadoop01 ~]$ hdfs zkfc -formatZK
啟動 HDFS
[hadoop@hadoop01 ~]$ start-dfs.sh
啟動 YARN
[hadoop@hadoop01 ~]$ start-yarn.sh
若備用節點的 resourcemanager 沒有啟動起來,則手動啟動起來:
[hadoop@hadoop02 ~]$ yarn-daemon.sh start resourcemanager

7)補充:

查看各主節點的狀態
HDFS:
hdfs haadmin -getServiceState nn1
hdfs haadmin -getServiceState nn2

YARN:
yarn rmadmin -getServiceState rm1
yarn rmadmin -getServiceState rm2

4. HA的集群搭建后測試

1.手動殺死active的namenode,看看集群的狀況
2.手動殺死active的resourcemanager,看看集群的狀況
3.在上傳文件時,殺死namenode,查看集群狀況
4.在執行任務時,殺死resourcemanager,查看集群狀態

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

万源市| 台中市| 安徽省| 武冈市| 额尔古纳市| 新河县| 萨迦县| 徐闻县| 巴中市| 梅河口市| 灌阳县| 富裕县| 万源市| 泸水县| 维西| 乌拉特中旗| 罗定市| 个旧市| 彭阳县| 白水县| 岫岩| 江安县| 济源市| 谢通门县| 罗平县| 团风县| 祁门县| 错那县| 慈溪市| 忻城县| 陈巴尔虎旗| 从江县| 阜城县| 钟山县| 同心县| 驻马店市| 兴海县| 百色市| 昂仁县| 泾源县| 建昌县|