hadoop的組件yarn

hadoop的組件yarn

YARN分佈式資源管理框架:

hadoop1.0

在這裏插入圖片描述
在這裏插入圖片描述
hadoop2.0
在這裏插入圖片描述
在這裏插入圖片描述
Scheduler :調度器(容量調度,公平調度。FIFO)

container:資源容器(抽象概念)

ApplicationsManager(job-submissions)

negotion the frist container for executing the application spectify ApplicationMaster(4次重啓(容錯),單個任務的管理者,資源申請者,追蹤狀態,監控任務)

resourcemanager:源碼

resourcemanager:nodemanager:心跳告訴resourcemanager資源彙報

nodemanager:負責當前節點的資源,接受appmaster resourcemanager的信息,resourcemanager資源彙報

appmaster:申請資源

container:資源抽象 1個切片 在nodemanager

10%冗餘(一個片最多容納148M數據)

scheduler:

applicationsManager

YARN的通信協議rpc

yarn:

resourcemanager

applicationmanager

applicationmaster(4次分配)

切片對應一個maptask container(資源容器)

reducetask

reduce的數量是由分區決定的

nodemanager

yarn的基本思想是將資源管理和作業調度/監視功能劃分爲單獨的守護進程。其思想是擁有一個全局ResourceManager (RM)和每個應用程序的ApplicationMaster (AM)。應用程序可以是單個作業,也可以是一組作業

ResourceManager和NodeManager構成數據計算框架。ResourceManager是在系統中的所有應用程序之間仲裁資源的最終權威。NodeManager是每臺機器的框架代理,負責監視容器的資源使用情況(cpu、內存、磁盤、網絡),並向ResourceManager/Scheduler報告相同的情況

每個應用程序ApplicationMaster實際上是一個特定於框架的庫,它的任務是與ResourceManager協商資源,並與NodeManager一起執行和監視任務

yarn的提交job的流程

在這裏插入圖片描述

ResourceMangager:管理nodemanger ,管理全局的資源,

Appmaster:對作業的調度做一個追蹤,作業的老大
Container:虛擬的管理資源,cpu ,內存,磁盤等。

[外鏈圖片轉存失敗(img-rfIIS95l-1568966471715)(1568966453289.png)]

1、基本架構

(1)組成:YARN 主要由 ResourceManager、NodeManager、ApplicationMaster 和 Container 等組件構成

(2)ResourceManager作用

1)處理客戶端請求

2)監控NodeManager

3)啓動或監控ApplicationMaster

4)資源的分配與調度

(3)NodeManager作用

1)管理單個節點上的資源

2)處理來自ResourceManager的命令

3)處理來自ApplicationMaster的命令

(4)ApplicationMaster 作用

1)負責數據的切分

2)爲應用程序申請資源並分配給內部的任務

3)任務的監控與容錯

(5)Container :Container是YARN中的資源抽象,它封裝了某個節點上的多維度資源,如內存、CPU、磁盤、網絡等。

解析:

第一步:客戶端機器,提交作業的機器,查看自己的yarn-site.xml裏的yarn-resourceManager.hostname,與ResourceManager通信,用的是RPC的方式。

1.首先客戶端機器(程序提交的機器,yarn 的客戶端程序)向ResourceMangaer提出申請運行一個mr的job

2.Resourcemanager接收到請求之後,給客戶端返回一個jobid,以及提交資源用的stagingdir的文件hdfs://xue01/tmp/hadoop-yarn/stagingdir

3.客戶端收到消息後,開始向hdfs://xue01/tmp/hadoop-yarn/stagingdi下提交mr程序的相關資源文件包括

(a)job.jar (b)job.conf(裏面有各種組件的配置信息) ©job.split (任務的切片信息)

4.然後客戶端再次通知resourceManager,job的資源文件提交完畢

5.RM將用戶的請求打包爲task,放置調度隊列,根據當前yarn的調度模式進行調度(YARN提供的三種任務調度策:FIFO Scheduler,Capacity Scheduler 和 Fair Scheduler)。

6.客戶端資源文件提交完畢,向RM申請運行applicationMaster(後續簡稱AM)。

7.然後ResourceManager得到請求,找了一臺nodeManager讓它開啓開啓AppMaster

8.那臺nodemanager 在resoucemanger的任務隊列中獲取到任務task,創建了contianer容器啓動Appmaster,然後去hdfs://xue01/tmp/hadoop-yarn/stagingdir下載資源文件

9.Appmaster再向Resourecmanager申請Maptask運算的資源(就是其他節點上運行任務的container)

10.RM將請求再打包爲task放置調度隊列

11.其它nodeManger獲取到maptask後會再創建contianer容器並去hdfs://xue01/tmp/hadoop-yarn/stagingdir下載資源文件,contianer中的mapTask任務由AM負責監控和調度。

12.Appmaster向maptask(就是nodemanager開啓的container)發送程序啓動命令,

13.除了有Appmaster外的,contianer運行mapTask

14.當各節點mapTask運行完畢後,Appmaster再向ResourceManager申請運行reduceTask容器,resourcemanager將請求再打包爲task放置調度隊列。

15.其它NM獲取到task後會再創建contianer容器並下載資源文件,contianer中的reduceTask任務由AM負責監控和調度。

16.Appmaster向reducetask(就是nodemanager開啓的container)發送程序啓動命令,先去maptask執行完放結果的地方拉取屬於自己的數據,然後再進行運算

17.程序運行完成後,AM向RM註銷自己。讓RM回收所有的資源。

切片:

(client來執行、inputformat---->getspilts()–>不同輸入文件有不同的實現)

10%冗餘(文本類型)

數據庫中(大概130行一個分片)

查找數據類型:

文件類型:

數據庫:

壓縮 文件(不可切割的文件)直接添加片

查看源碼創建分片信息的集合splits,用於存放分片信息

遍歷目錄下文件

FileInputFormat.setInputDirRecursive(job,true);//遞歸遍歷

循環取出每一個文件,然後做如下操作

獲取文件大小及位置

計算每個分片的大小

FileInputFormat.setMaxInputSplitSize(job,100);
FileInputFormat.setMinInputSplitSize(job,1);
long minSize = Math.max(getFormatMinSplitSize()//1
                        , getMinSplitSize(job));//配置文件中可設置
long maxSize = getMaxSplitSize(job);//可在運行時指定-D mapreduce.input.fileinputformat.split.maxsize=300M,默認是long的最大值
long splitSize = computeSplitSize(blockSize, minSize, maxSize);
return Math.max(minSize, Math.min(maxSize, blockSize));

判斷文件是否可以分片(壓縮格式有的可以進行分片,有的不可以,)

剩餘文件的大小/分片大小>1.1時,循環執行封裝分片信息的方法,具體如下

封裝一個分片信息(包含文件的路徑,分片的起始偏移量,要處理的大小,分片包含的塊的信息,分片中包含的塊存在哪兒些機器上)

剩餘文件的大小/分片大小<=1.1且 不等於0時,封裝一個分片信息(包含文件的路徑,分片的起始偏移量,要處理的大小,分片包含的塊的信息,分片中包含的塊存在哪兒些機器上)

分片的注意事項:1.1倍的冗餘。260M文件分幾個片?

考慮Hadoop應用處理的數據集比較大,因此需要藉助壓縮。按照效率從高到低排列的
(1)使用容器格式文件,例如:順序文件、RCFile、Avro數據格式支持壓縮和切分文件。另外在配合使用一些快速壓縮工具,例如:LZO、LZ4或者Snappy.
(2)使用支持切分壓縮格式,例如gzip2
(3)在應用中將文件切分成塊,對每塊進行任意格式壓縮。這種情況確保壓縮後的數據庫接近HDFS塊大小。
(4)存儲未壓縮文件,以原始文件存儲。

讀取分片的細節:如果有多個分片

  • 第一個分片讀到末尾再多讀一行
  • 既不是第一個分片也不是最後一個分片第一行數據捨棄,末尾多讀一行
  • 最後一個分片捨棄第一行,末尾多讀一行

client appmaster

MapReduce: setup僅在map函數執行之前執行一次(適用於初始化和表頭)

map階段求總人數(傳遞,跨節點傳遞 )

後的數據庫接近HDFS塊大小。
(4)存儲未壓縮文件,以原始文件存儲。


讀取分片的細節:如果有多個分片

- 第一個分片讀到末尾再多讀一行
- 既不是第一個分片也不是最後一個分片第一行數據捨棄,末尾多讀一行
- 最後一個分片捨棄第一行,末尾多讀一行



client appmaster

MapReduce: setup僅在map函數執行之前執行一次(適用於初始化和表頭) 

map階段求總人數(傳遞,跨節點傳遞 )

cleanup僅在所有map函數執行之後執行一次(適用於關閉對象,關閉流)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章