Hadoop+yarn高可用

基本概念:

  • ApacheHadoopYARN(YetAnotherResourceNegotiator,另一種資源協調者)是一種新的Hadoop資源管理器,它是一個通用資源管理系統,可爲上層應用提供統一的資源管理和調度,它的引入爲集羣在利用率、資源統一管理和數據共享等方面帶來了巨大好處。

  • YARN的基本思想是將JobTracker的兩個主要功能(資源管理和作業調度/監控)分離,主要方法是創建一個全局的ResourceManager(RM)和若干個針對應用程序的ApplicationMaster(AM)。這裏的應用程序是指傳統的MapReduce作業或作業的DAG(有向無環圖)。

  • YARN 分層結構的本質是 ResourceManager。這個實體控制整個集羣並管理應用程序向基礎計算資源的分配。ResourceManager 將各個資源部分(計算、內存、帶寬等)精心安排給基礎 NodeManager(YARN 的每節點代理)。ResourceManager 還與 ApplicationMaster 一起分配資源,與 NodeManager 一起啓動和監視它們的基礎應用程序。在此上下文中,ApplicationMaster 承擔了以前的 TaskTracker 的一些角色,ResourceManager 承擔了 JobTracker 的角色。

  • ApplicationMaster 管理一個在 YARN 內運行的應用程序的每個實例。ApplicationMaster 負責協調來自 ResourceManager 的資源,並通過 NodeManager 監視容器的執行和資源使用(CPU、內存等的資源分配)。請注意,儘管目前的資源更加傳統(CPU 核心、內存),但未來會帶來基於手頭任務的新資源類型(比如圖形處理單元或專用處理設備)。從 YARN 角度講,ApplicationMaster 是用戶代碼,因此存在潛在的安全問題。YARN 假設 ApplicationMaster 存在錯誤或者甚至是惡意的,因此將它們當作無特權的代碼對待。

  • NodeManager 管理一個 YARN 集羣中的每個節點。NodeManager 提供針對集羣中每個節點的服務,從監督對一個容器的終生管理到監視資源和跟蹤節點健康。MRv1 通過插槽管理 Map 和 Reduce 任務的執行,而 NodeManager 管理抽象容器,這些容器代表着可供一個特定應用程序使用的針對每個節點的資源。YARN 繼續使用 HDFS 層。它的主要 NameNode 用於元數據服務,而 DataNode 用於分散在一個集羣中的複製存儲服務。

  • 要使用一個 YARN 集羣,首先需要來自包含一個應用程序的客戶的請求。ResourceManager 協商一個容器的必要資源,啓動一個 ApplicationMaster 來表示已提交的應用程序。通過使用一個資源請求協議,ApplicationMaster 協商每個節點上供應用程序使用的資源容器。執行應用程序時,ApplicationMaster 監視容器直到完成。當應用程序完成時,ApplicationMaster 從 ResourceManager 註銷其容器,執行週期就完成了。

  • yarn的優點
    (1)大大減小了 JobTracker(也就是現在的 ResourceManager)的資源消耗,並且讓監測每一個 Job 子任務 (tasks) 狀態的程序分佈式化了,更安全、更優美
    (2)在新的 Yarn 中,ApplicationMaster 是一個可變更的部分,用戶可以對不同的編程模型寫自己的 AppMst,讓更多類型的編程模型能夠跑在 Hadoop 集羣中,可以參考 hadoop Yarn 官方配置模板中的 mapred-site.xml 配置
    (3)對於資源的表示以內存爲單位 ( 在目前版本的 Yarn 中,沒有考慮 cpu 的佔用 ),比之前以剩餘 slot 數目更合理。
    (4)老的框架中,JobTracker 一個很大的負擔就是監控 job 下的 tasks 的運行狀況,現在,這個部分就扔給 ApplicationMaster 做了,而 ResourceManager 中有一個模塊叫做 ApplicationsMasters( 注意不是 ApplicationMaster),它是監測 ApplicationMaster 的運行狀況,如果出問題,會將其在其他機器上重啓。
    (5)Container 是 Yarn 爲了將來作資源隔離而提出的一個框架。這一點應該借鑑了 Mesos 的工作,目前是一個框架,僅僅提供 java 虛擬機內存的隔離,hadoop 團隊的設計思路應該後續能支持更多的資源調度和控制 , 既然資源表示成內存量,那就沒有了之前的 map slot/reduce slot 分開造成集羣資源閒置的尷尬情況。

  • YARN的核心思想:將JobTracker和TaskTacker進行分離它由下面幾大構成組件:

  1. 一個全局的資源管理器 ResourceManager(RM是一個全局的資源管理器,負責整個系統的資源管理和分配。它主要由兩個組件構成:調度器(Scheduler)和應用程序管理器(Applications Manager,ASM))
  2. ResourceManager的每個節點代理 NodeManager(NM是每個節點上的資源和任務管理器)
  3. 表示每個應用的 ApplicationMaster(用戶提交的每個應用程序均包含一個AM,主要功能包括:與RM調度器協商以獲取資源(用Container表示);將得到的任務進一步分配給內部的任務(資源的二次分配);與NM通信以啓動/停止任務;監控所有任務運行狀態,並在任務運行失敗時重新爲任務申請資源以重啓任務)
  4. 每一個ApplicationMaster擁有多個Container在NodeManager上運行(Container是YARN中的資源抽象,它封裝了某個節點上的多維度資源,如內存、CPU、磁盤、網絡等,當AM向RM申請資源時,RM爲AM返回的資源便是用Container表示。YARN會爲每個任務分配一個Container,且該任務只能使用該Container中描述的資源。)

yarn集羣管理器的配置過程

1.保證hadoop集羣是正常的,每個節點jps查看一下
server1:

[hadoop@server1 hadoop]$ jps
3185 SecondaryNameNode
2997 NameNode
3318 Jps

server2:

[hadoop@server2 ~]$ jps
2421 DataNode
2453 Jps

在這裏插入圖片描述
server3:

[hadoop@server3 ~]$ jps
2468 Jps
2415 DataNode

在這裏插入圖片描述
server4:

[hadoop@server4 ~]$ jps
2476 Jps
2415 DataNode

在這裏插入圖片描述
2.切換到/hadoop/hadoop/etc/hadoop目錄,編輯配置文件

cd etc/hadoop/
[hadoop@server1 hadoop]$ cd etc/hadoop/
[hadoop@server1 hadoop]$ vim mapred-site.xml 
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>

在這裏插入圖片描述
在這裏插入圖片描述

[hadoop@server1 hadoop]$ vim yarn-site.xml 
  <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>

在這裏插入圖片描述

[hadoop@server1 hadoop]$ pwd
/home/hadoop/hadoop/etc/hadoop

在這裏插入圖片描述
3.開啓服務,每個節點jps查看
server1

[hadoop@server1 ~]$ cd hadoop
[hadoop@server1 hadoop]$ sbin/start-yarn.sh 
Starting resourcemanager
Starting nodemanagers

[hadoop@server1 hadoop]$ jps
3185 SecondaryNameNode
2997 NameNode
3575 Jps
3455 ResourceManager

在這裏插入圖片描述
在這裏插入圖片描述
server2:

[hadoop@server2 ~]$ jps
12145 Jps
2421 DataNode
12078 NodeManager

在這裏插入圖片描述
server3:

[hadoop@server3 ~]$ jps
12073 NodeManager
12173 Jps
2415 DataNode

在這裏插入圖片描述
server4:

[hadoop@server4 ~]$ jps
2640 Jps
2540 NodeManager
2415 DataNode

在這裏插入圖片描述
配置文件中的內容:**

 bin/hdfs --daemon start journalnode
    <property>
    <name>yarn.resourcemanager.ha.enabled</name>
    <value>true</value>
    </property>
    

<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>RM_CLUSTER</value>
</property>

<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>

<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>172.25.19.1</value>
</property>


<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>172.25.19.5</value>
</property>


<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>

<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore<value>
</property>

<property>
<name>yarn.resourcemanager.zk-address</name>
<value>172.25.19.2:2181,172.25.19.3:2181,172.25.19.4:2181<value>
</property>

(未完待續~)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章