Resource Allocation of Yarn

關鍵詞:yarn 資源分配 mapreduce sparkhtml

 

 


 

簡要指南java

 

適合不想看太多原理細節直接上手用的人。shell

基本原則:apache

  • container分配的內存不等於機器實際用掉的內存。NM給container分配的內存是預留這麼多內存,但實際用多少取決於你的-Xmx加上你的堆外內存。大部分堆外內存使用很少的狀況下,實際主要就是JVM堆內存。
  • container內存是按yarn.scheduler.minimum-allocation-mb的整數倍分配的,用戶設置的內存不足整數倍會向上取整,而且不會超過 yarn.scheduler.maximum-allocation-mb
  • 還有一個增量概念 yarn.scheduler.increment-allocation-mb (默認1024m),即若是yarn.scheduler.minimum-allocation-mb設置較大,假設4g,那客戶端申請了4.5G內存,按道理最終container內存是要變成 4+4=8g 的,但有增量內存1024m配置的話,分配內存時會嘗試 4+1=5g 是否能知足,從而避免內存資源浪費。
  • 全部上線的任務都要手動設置資源配置,尤爲是內存。

 

MapReduce:dom

  • mapreduce.map.memory.mb表示給map的container申請的最大內存,即container內存;mapreduce.map.java.opts則是設置jvm啓動的實際參數,其中堆內存-Xmx也是在這裏設置,不能超過mapreduce.map.memory.mb,通常設置爲0.75倍的mapreduce.map.memory.mb(只是建議,不必定),留給堆外內存一點空間。reduce同理。

 

Spark 1.x:jvm

關於Spark On YARN相關的配置參數,請參考 Spark配置參數。通常主要關注如下幾個參數:
  • spark.driver.memory:默認值512m
  • spark.executor.memory:默認值512m
  • spark.yarn.am.memory:默認值512m
  • spark.yarn.executor.memoryOverhead:值爲executorMemory * 0.07, with minimum of 384
  • spark.yarn.driver.memoryOverhead:值爲driverMemory * 0.07, with minimum of 384
  • spark.yarn.am.memoryOverhead:值爲AM memory * 0.07, with minimum of 384

  • --executor-memory/spark.executor.memory 控制 executor 的堆的大小,可是 JVM 自己也會佔用必定的堆空間,好比內部的 String 或者直接 byte buffer,spark.yarn.XXX.memoryOverhead 屬性決定向 YARN 請求的每一個 executor 或dirver或am 的額外堆內存大小,默認值爲 max(384, 0.07 * spark.executor.memory)。因此實際計算container內存的時候是 memory + memoryOverhead
  • 在 executor 執行的時候配置過大的 memory 常常會致使過長的GC延時,內存並非越大越好。

spark core分配:oop

  • 默認的yarn.scheduler.capacity.resource-calculator=org.apache.hadoop.yarn.util.resource.DefaultResourseCalculator , 這種時候的vcore會按container個數分配,而不是實際的spark core數。即設置了5個executor,每一個executor2個core,實際除去ApplicationMaster和spark driver,最後只有5個vcore。
  • 改爲org.apache.hadoop.yarn.util.resource.DominantResourceCalculator,上述案例則會變成10個vcore。暫未測試和看代碼肯定是否能客戶端配置生效,通常服務端配置,在ambari裏或部分語境下,有時也叫CPU-schedule的ResourceCalculator,相比default版的只考慮memory,dominant的同時考慮了memory和cpu。

 

 

Reference(值得一讀):測試

相關文章
相關標籤/搜索