[譯]運行在YARN上的Spark程序的Executor捏雌,Cores和Memory的分配

好久沒更新了姆坚,。膏蚓。瓢谢。太懶了。

在跑Spark-On-Yarn程序的時候驮瞧,往往會對幾個參數(shù)(num-executors氓扛,executor-cores,executor-memory等)理解很模糊剧董,從而憑感覺地去指定值幢尚,這是不符合有追求程序員信仰的破停。因此翅楼,搞懂它們尉剩,很有必要。
本文翻譯自https://spoddutur.github.io/spark-notes/distribution_of_executors_cores_and_memory_for_spark_application.html毅臊。

譯文如下:

是否曾經(jīng)想要知道如何根據(jù)你的集群理茎,配置這些Spark運行參數(shù):--num-executors, --executor-memory and --execuor-cores 呢?

探究思路

  1. 理論引導:首先管嬉,有必要了解一些重要建議皂林,能幫助我們更好地理解它;
  2. 實戰(zhàn):其次蚯撩,以一個集群為例础倍,推演出該集群的參數(shù)的推薦值。

理論引導

當配置參數(shù)時胎挎,請遵循下表沟启,將其推薦建議牢記于心

  • Hadoop/Yarn/OS 守護進程:
    當利用一個集群管理器(比如YARN)運行spark程序時,存在一些守護進程運行在后臺犹菇,比如NameNode德迹,Secondary NameNode,DataNode揭芍,JobTracker和TaskTracker胳搞。因此,當確定num-executor時称杨,我們需要確保有足夠的cores(大約每個節(jié)點一個core)維持這些守護進程的平穩(wěn)運行肌毅。
  • Yarn ApplicationMaster (AM):
    ApplicationMaster的職責是:向ResourceManager協(xié)商資源,與NodeManager一同執(zhí)行并監(jiān)控containner及其資源消耗姑原。如果程序運行在Spark-On-Yarn悬而,我們需要預留一些資源給ApplicationMaster,AM大約需要1024MB的內(nèi)存和一個Executor页衙。
  • HDFS吞吐:
    HDFS客戶端會遇到大量并發(fā)線程的問題摊滔。 據(jù)觀察,HDFS當達到全寫入吞吐量時店乐,需要每個executor執(zhí)行約5個任務艰躺。 因此,最好控制每個executor中core的數(shù)目低于那個數(shù)字眨八。
  • 內(nèi)存開銷:
    下圖描繪了spark-yarn的內(nèi)存使用情況:
    [圖片上傳失敗...(image-fa6806-1536392056623)]
    圖中注意兩件事情:
       Full memory requested to yarn per executor =
          spark-executor-memory + spark.yarn.executor.memoryOverhead
      spark.yarn.executor.memoryOverhead = 
            Max(384MB, 7% of spark.executor-memory)

所以腺兴,如果我們申請了每個executor的內(nèi)存為20G時,對我們而言廉侧,AM將實際得到20G+ memoryOverhead = 20 + 7% * 20GB = ~23G內(nèi)存页响。

  • 執(zhí)行擁有太多內(nèi)存的executor會產(chǎn)生過多的垃圾回收延遲
  • 執(zhí)行過小的executor(舉例而言篓足,一個只有一核和僅僅足夠內(nèi)存跑一個task的executor),將會丟失在單個JVM中運行多任務的好處闰蚕。

理論夠了...開始實戰(zhàn)

現(xiàn)在栈拖,我們考慮一個10個節(jié)點的如下配置的集群,并分析不同參數(shù)設置的結果没陡。
集群配置如下:

**集群配置:**
10個節(jié)點
每個節(jié)點16核
每個節(jié)點64G內(nèi)存

第一種方案:Tiny executors [每個Executor一個Core]

Tiny executors表示一個executor配置一個core涩哟。下表描述了該方案下的參數(shù)配置。

- '--num-executors' = '該方案下盼玄,每個executor配置一個core'
                                = '集群中的core的總數(shù)'
                                = '每個節(jié)點的core數(shù)目 * 集群中的節(jié)點數(shù)' 
                                = 16 x 10 = 160
- '--executor-cores' = 1 (每個executor一個core)
- '--executor-memory' = '每個executor的內(nèi)存'
                                    = '每個節(jié)點的內(nèi)存/每個節(jié)點的executor數(shù)目'
                                    = 64GB/16 = 4GB

分析:當一個executor只有一個core時贴彼,正如我們上面分析的,我們可能不能發(fā)揮在單個JVM上運行多任務的優(yōu)勢埃儿。此外器仗,共享/緩存變量(如廣播變量和累加器)將復制到節(jié)點的每個core,這里是16次童番。并且精钮,我們沒有為Hadoop / Yarn守護進程留下足夠的內(nèi)存開銷,我們也沒有計入ApplicationManager妓盲。因此杂拨,這不是一個好的方案!

第二種方案:Fat executors (每個節(jié)點一個Executor):

Fat executors表示一個executor獨占一個節(jié)點悯衬。下表描述了該方案下的參數(shù)配置:

- `--num-executors` = `該方案下弹沽,一個executor獨占一個節(jié)點`
                                = `集群中的節(jié)點的數(shù)目`
                                = 10
- `--executor-cores` = `一個節(jié)點一個executor意味著每個executor獨占節(jié)點中所 
                                   有的cores`
                                = `節(jié)點中的core的數(shù)目`
                                = 16
- `--executor-memory` = `每個executor的內(nèi)存`
                                    = `節(jié)點的內(nèi)存/節(jié)點中executor的數(shù)目`
                                    = 64GB/1 = 64GB

分析:每個executor獨占16個核心,則ApplicationManager和守護程序進程則無法分配到core筋粗,并且策橘,HDFS吞吐量會受到影響,導致過多的垃圾結果娜亿。 同樣地丽已,該方案不好!

第三種方案:Balance between Fat (vs) Tiny

根據(jù)上面討論的建議:
  • 基于上述的建議买决,我們給每個executor分配5個core => -- executor-cores = 5 (保證良好的HDFS吞吐)
  • 每個節(jié)點留一個core給Hadoop/Yarn守護進程 => 每個節(jié)點可用的core的數(shù)目 = 16 - 1
  • 所以沛婴,集群中總共可用的core的數(shù)目是 15 * 10 = 150
  • 可用的executor的數(shù)目 = (總的可用的core的數(shù)目 / 每個executor的core的數(shù)目)= 150 / 5 = 30
  • 留一個executor給ApplicationManager => --num-executors = 29
  • 每個節(jié)點的executor的數(shù)目 = 30 / 10 = 3
  • 每個executor的內(nèi)存 = 64GB / 3 = 21GB
  • 計算堆開銷 = 7% * 21GB = 3GB。因此督赤,實際的 --executor-memory = 21 - 3 = 18GB
因此嘁灯,推薦的配置如下:29 executors, 18GB memory each and 5 cores

each !
分析:很明顯躲舌,第三種方案在Fat vs Tiny 兩種方案中找到了合適的平衡點丑婿。毋庸置疑,它實現(xiàn)了Fat executor的并行性和Tiny executor的最佳吞吐量!

結論:

我們看到:

  • 當為spark程序配置運行參數(shù)的時候羹奉,應謹記一些推薦事項:
    1.為Yarn的Application Manager預留資源
    2.我們應該如何為Hadoop / Yarn / OS deamon進程節(jié)省一些cores
    3.學習關于spark-yarn-memory-usage
  • 另外秒旋,檢查并分析了配置這些參數(shù)的三種不同方法:
    1.Tiny Executors - 每個executor配置一個core
    2.Fat Executors - 每個executor獨占一個節(jié)點
    3.推薦方案 - 基于建議項的Tiny(Vs)Fat的合適的平衡。

--num-executors, --executor-cores and --executor-memory..這三個參數(shù)在spark性能中扮演很重要的角色诀拭,他們控制這你的spark程序獲得的CPU和內(nèi)存的資源迁筛。對于用戶來說,很有必要理解如何去配置它們炫加。希望這篇博客對你有幫助瑰煎。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末铺然,一起剝皮案震驚了整個濱河市俗孝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌魄健,老刑警劉巖赋铝,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異沽瘦,居然都是意外死亡革骨,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門析恋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來良哲,“玉大人,你說我怎么就攤上這事助隧≈欤” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵并村,是天一觀的道長巍实。 經(jīng)常有香客問我,道長哩牍,這世上最難降的妖魔是什么棚潦? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮膝昆,結果婚禮上丸边,老公的妹妹穿的比我還像新娘。我一直安慰自己荚孵,他們只是感情好妹窖,可當我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著处窥,像睡著了一般嘱吗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天谒麦,我揣著相機與錄音俄讹,去河邊找鬼。 笑死绕德,一個胖子當著我的面吹牛患膛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播耻蛇,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼踪蹬,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了臣咖?” 一聲冷哼從身側(cè)響起跃捣,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎夺蛇,沒想到半個月后疚漆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡刁赦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年娶聘,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片甚脉。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡丸升,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出牺氨,到底是詐尸還是另有隱情狡耻,我是刑警寧澤,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布波闹,位于F島的核電站酝豪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏精堕。R本人自食惡果不足惜孵淘,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望歹篓。 院中可真熱鬧瘫证,春花似錦、人聲如沸庄撮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽洞斯。三九已至毡庆,卻和暖如春坑赡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背么抗。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工毅否, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蝇刀。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓螟加,卻偏偏與公主長得像,于是被迫代替她去往敵國和親吞琐。 傳聞我的和親對象是個殘疾皇子捆探,可洞房花燭夜當晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內(nèi)容

  • Apache Spark 是專為大規(guī)模數(shù)據(jù)處理而設計的快速通用的計算引擎。Spark是UC Berkeley AM...
    大佛愛讀書閱讀 2,834評論 0 20
  • 1.1站粟、 分配更多資源 1.1.1黍图、分配哪些資源? Executor的數(shù)量 每個Executor所能分配的CPU數(shù)...
    miss幸運閱讀 3,186評論 3 15
  • 前言 在大數(shù)據(jù)計算領域卒蘸,Spark已經(jīng)成為了越來越流行雌隅、越來越受歡迎的計算平臺之一。Spark的功能涵蓋了大數(shù)據(jù)領...
    Alukar閱讀 556評論 0 6
  • 五 春草發(fā)芽修械,蝴蝶花也紛紛醒來趾牧,那片空地上,綠意盎然肯污。但是兔子奶奶翘单,依舊是兔子奶奶,讓它們消失的無影無蹤蹦渣『逦撸“我...
    風之影_ab3c閱讀 226評論 0 0
  • 一. 什么是CPU的緩存 CPU與高速緩存通過快速通道直接相連,而高速緩存和主存通過數(shù)據(jù)總線相連 CPU cach...
    coderzc閱讀 267評論 0 0