Yarn的JVM重用功能—uber
理解一下Container:容器中封裝了機器資源,如記憶體,CPU, 磁碟,網路等,每個任務(Task)會被分配一個容器,該任務只能在該容器中執行,並使用該容器封裝的資源。
一個應用程式所需的Container分為兩大類,如下:
(1) 執行ApplicationMaster的Container:這是由ResourceManager(向內部的資源排程器)申請和啟動的,使用者提交應用程式時,可指定唯一的ApplicationMaster所需的資源;
(2) 執行各類任務的Container:這是由ApplicationMaster向ResourceManager申請的,並由ApplicationMaster與NodeManager通訊以啟動之。
以上兩類Container可能在任意節點上,它們的位置通常而言是隨機的,即ApplicationMaster可能與它管理的任務執行在一個節點上。
Jvm重用:
首先,簡單回顧一下Hadoop 1.x中的JVM重用功能:使用者可以透過更改配置,來指定TaskTracker在同一個JVM裡面最多可以累積執行的Task的數量(預設是1)。這樣的好處是減少JVM啟動、退出的次數,從而達到提高任務執行效率的目的。 配置的方法也很簡單:透過設定mapred-site.xml裡面引數mapred.job.reuse.jvm.num.tasks的值。該值預設是1,意味著TaskTracker會為每一個Map任務或Reduce任務都啟動一個JVM,當任務執行完後再退出該JVM。依次類推,如果該值設定為3,TaskTracker則會在同一個JVM裡面最多依次執行3個Task,然後才會退出該JVM。
在 Yarn(Hadoop MapReduce v2)裡面,不再有引數mapred.job.reuse.jvm.num.tasks,但它也有類似JVM Reuse的功能——uber。據Arun的說法,啟用該功能能夠讓一些任務的執行效率提高2到3倍(“we've observed 2x-3x speedup for some jobs”)。不過,由於Yarn的結構已經大不同於MapReduce v1中JobTracker/TaskTracker的結構,因此uber的原理和配置都和之前的JVM重用機制大不相同。
1) uber的原理:
Yarn的預設配置會禁用uber元件,即不允許JVM重用。我們先看看在這種情況下,Yarn是如何執行一個MapReduce job的。首先,Resource Manager裡的Application Manager會為每一個application(比如一個使用者提交的MapReduce Job)在NodeManager裡面申請一個container,然後在該container裡面啟動一個Application Master。container在Yarn中是分配資源的容器(記憶體、cpu、硬碟等),它啟動時便會相應啟動一個JVM。此時,Application Master便陸續為application包含的每一個task(一個Map task或Reduce task)向Resource Manager申請一個container。等每得到一個container後,便要求該container所屬的NodeManager將此container啟動,然後就在這個container裡面執行相應的task。等這個task執行完後,這個container便會被NodeManager收回,而container所擁有的JVM也相應地被退出。在這種情況下,可以看出每一個JVM僅會執行一Task, JVM並未被重用。
使用者可以透過啟用uber元件來允許JVM重用——即在同一個container裡面依次執行多個task。在yarn-site.xml檔案中,改變一下幾個引數的配置即可啟用uber的方法:
引數| 預設值 | 描述
- mapreduce.job.ubertask.enable | (false) | 是否啟用user功能。如果啟用了該功能,則會將一個“小的application”的所有子task在同一個JVM裡面執行,達到JVM重用的目的。這個JVM便是負責該application的ApplicationMaster所用的JVM(執行在其container裡)。那具體什麼樣的application算是“小的application"呢?下面幾個引數便是用來定義何謂一個“小的application"
- mapreduce.job.ubertask.maxmaps | 9 | map任務數的閥值,如果一個application包含的map數小於該值的定義,那麼該application就會被認為是一個小的application
- mapreduce.job.ubertask.maxreduces | 1 | reduce任務數的閥值,如果一個application包含的reduce數小於該值的定義,那麼該application就會被認為是一個小的application。不過目前Yarn不支援該值大於1的情況“CURRENTLY THE CODE CANNOT SUPPORT MORE THAN ONE REDUCE”
- mapreduce.job.ubertask.maxbytes | | application的輸入大小的閥值。預設為dfs.block.size的值。當實際的輸入大小部超過該值的設定,便會認為該application為一個小的application。
最後,我們來看當uber功能被啟用的時候,Yarn是如何執行一個application的。首先,Resource Manager裡的Application Manager會為每一個application在NodeManager裡面申請一個container,然後在該container裡面啟動一個Application Master。containe啟動時便會相應啟動一個JVM。此時,如果uber功能被啟用,並且該application被認為是一個“小的application”,那麼Application Master便會將該application包含的每一個task依次在這個container裡的JVM裡順序執行,直到所有task被執行完("WIth 'uber' mode enabled, you'll run everything within the container of the AM itself")。這樣Application Master便不用再為每一個task向Resource Manager去申請一個單獨的container,最終達到了 JVM重用(資源重用)的目的。
原文:http://blog.csdn.net/samhacker/article/details/15692003
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29754888/viewspace-1591715/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Hadoop的JVM重用 (R2)HadoopJVM
- Kubernetes 支援 OpenAPI 的新功能API
- OBJECT_ID的重用Object
- Apache Hadoop Yarn與Kubernetes比較選擇 - codehunterApacheHadoopYarn
- Yarn-cluster 與 Yarn-client的區別Yarnclient
- OBJECT_ID的重用(二)Object
- Yarn篇--搭建yarn叢集Yarn
- 重用其他程式庫
- UITableViewCell重用機制UIView
- Spark:Yarn-client與Yarn-clusterSparkYarnclient
- yarn - 忽略版本號要求 yarn installYarn
- yarn的安裝,並使用yarn安裝vue腳手架YarnVue
- yarn 命令Yarn
- iOS開發-UITableView的重用機制iOSUIView
- kubernetes client-go功能介紹clientGo
- Oracle with重用子查詢Oracle
- 【深入淺出 Yarn 架構與實現】4-1 ResourceManager 功能概述Yarn架構
- yarn的安裝和使用Yarn
- Yarn 的 Plug'n'Play 特性Yarn
- Yarn的常用命令Yarn
- 12 Spark on YARNSparkYarn
- Yarn 安裝Yarn
- Hadoop YarnHadoopYarn
- Yarn詳解Yarn
- hive on spark on yarnHiveSparkYarn
- Javascript中的Trait與程式碼重用JavaScriptAI
- Kubernetes中負載均衡功能簡介負載
- yarn install,yarn add,NPM run dev 報錯YarnNPMdev
- golang slice 和 string 重用Golang
- YARN的日誌聚集配置使用Yarn
- npm 和 yarn 的使用區別NPMYarn
- kubernetes 依賴庫apimachinery中的 wait 庫功能(1)APIMacAI
- node中安裝yarn(nodejs Yarn替代npm包管理)YarnNodeJSNPM
- oracle資料庫中索引空間的重用Oracle資料庫索引
- Yarn執行原理Yarn
- Spark on Yarn 實踐SparkYarn
- yarn certificate has expiredYarn
- 自JDK 8 以來所有Java和JVM新功能的分類列表JDKJavaJVM