溫馨提示×

溫馨提示×

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

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

Yarn中JVM重用功能uber怎么用

發(fā)布時間:2021-12-09 09:20:10 來源:億速云 閱讀:226 作者:小新 欄目:云計算

這篇文章主要介紹了Yarn中JVM重用功能uber怎么用,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

理解一下Container:容器中封裝了機(jī)器資源,如內(nèi)存,CPU, 磁盤,網(wǎng)絡(luò)等,每個任務(wù)(Task)會被分配一個容器,該任務(wù)只能在該容器中執(zhí)行,并使用該容器封裝的資源。

一個應(yīng)用程序所需的Container分為兩大類,如下:

(1) 運行ApplicationMaster的Container:這是由ResourceManager(向內(nèi)部的資源調(diào)度器)申請和啟動的,用戶提交應(yīng)用程序時,可指定唯一的ApplicationMaster所需的資源;

(2) 運行各類任務(wù)的Container:這是由ApplicationMaster向ResourceManager申請的,并由ApplicationMaster與NodeManager通信以啟動之。

以上兩類Container可能在任意節(jié)點上,它們的位置通常而言是隨機(jī)的,即ApplicationMaster可能與它管理的任務(wù)運行在一個節(jié)點上。

Jvm重用:


首先,簡單回顧一下Hadoop 1.x中的JVM重用功能:用戶可以通過更改配置,來指定TaskTracker在同一個JVM里面最多可以累積執(zhí)行的Task的數(shù)量(默認(rèn)是1)。這樣的好處是減少JVM啟動、退出的次數(shù),從而達(dá)到提高任務(wù)執(zhí)行效率的目的。 配置的方法也很簡單:通過設(shè)置mapred-site.xml里面參數(shù)mapred.job.reuse.jvm.num.tasks的值。該值默認(rèn)是1,意味著TaskTracker會為每一個Map任務(wù)或Reduce任務(wù)都啟動一個JVM,當(dāng)任務(wù)執(zhí)行完后再退出該JVM。依次類推,如果該值設(shè)置為3,TaskTracker則會在同一個JVM里面最多依次執(zhí)行3個Task,然后才會退出該JVM。

在 Yarn(Hadoop MapReduce v2)里面,不再有參數(shù)mapred.job.reuse.jvm.num.tasks,但它也有類似JVM Reuse的功能——uber。據(jù)Arun的說法,啟用該功能能夠讓一些任務(wù)的執(zhí)行效率提高2到3倍(“we've observed 2x-3x speedup for some jobs”)。不過,由于Yarn的結(jié)構(gòu)已經(jīng)大不同于MapReduce v1中JobTracker/TaskTracker的結(jié)構(gòu),因此uber的原理和配置都和之前的JVM重用機(jī)制大不相同。

1) uber的原理:

Yarn的默認(rèn)配置會禁用uber組件,即不允許JVM重用。我們先看看在這種情況下,Yarn是如何執(zhí)行一個MapReduce job的。首先,Resource Manager里的Application Manager會為每一個application(比如一個用戶提交的MapReduce Job)在NodeManager里面申請一個container,然后在該container里面啟動一個Application Master。container在Yarn中是分配資源的容器(內(nèi)存、cpu、硬盤等),它啟動時便會相應(yīng)啟動一個JVM。此時,Application Master便陸續(xù)為application包含的每一個task(一個Map task或Reduce task)向Resource Manager申請一個container。等每得到一個container后,便要求該container所屬的NodeManager將此container啟動,然后就在這個container里面執(zhí)行相應(yīng)的task。等這個task執(zhí)行完后,這個container便會被NodeManager收回,而container所擁有的JVM也相應(yīng)地被退出。在這種情況下,可以看出每一個JVM僅會執(zhí)行一Task, JVM并未被重用。

用戶可以通過啟用uber組件來允許JVM重用——即在同一個container里面依次執(zhí)行多個task。在yarn-site.xml文件中,改變一下幾個參數(shù)的配置即可啟用uber的方法:

參數(shù)| 默認(rèn)值 | 描述

- mapreduce.job.ubertask.enable | (false) | 是否啟用uber功能。如果啟用了該功能,則會將一個“小的application”的所有子task在同一個JVM里面執(zhí)行,達(dá)到JVM重用的目的。這個JVM便是負(fù)責(zé)該application的ApplicationMaster所用的JVM(運行在其container里)。那具體什么樣的application算是“小的application"呢?下面幾個參數(shù)便是用來定義何謂一個“小的application"

- mapreduce.job.ubertask.maxmaps | 9 | map任務(wù)數(shù)的閥值,如果一個application包含的map數(shù)小于該值的定義,那么該application就會被認(rèn)為是一個小的application

- mapreduce.job.ubertask.maxreduces | 1 | reduce任務(wù)數(shù)的閥值,如果一個application包含的reduce數(shù)小于該值的定義,那么該application就會被認(rèn)為是一個小的application。不過目前Yarn不支持該值大于1的情況“CURRENTLY THE CODE CANNOT SUPPORT MORE THAN ONE REDUCE”

- mapreduce.job.ubertask.maxbytes | | application的輸入大小的閥值。默認(rèn)為dfs.block.size的值。當(dāng)實際的輸入大小部超過該值的設(shè)定,便會認(rèn)為該application為一個小的application。

最后,我們來看當(dāng)uber功能被啟用的時候,Yarn是如何執(zhí)行一個application的。首先,Resource Manager里的Application Manager會為每一個application在NodeManager里面申請一個container,然后在該container里面啟動一個Application Master。containe啟動時便會相應(yīng)啟動一個JVM。此時,如果uber功能被啟用,并且該application被認(rèn)為是一個“小的application”,那么Application Master便會將該application包含的每一個task依次在這個container里的JVM里順序執(zhí)行,直到所有task被執(zhí)行完("WIth 'uber' mode enabled, you'll run everything within the container of the AM itself")。這樣Application Master便不用再為每一個task向Resource Manager去申請一個單獨的container,最終達(dá)到了 JVM重用(資源重用)的目的。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Yarn中JVM重用功能uber怎么用”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI