spark+yarn調整計算任務的記憶體佔用
阿新 • • 發佈:2018-12-22
調整的背景
公司正式環境有一個小小的spark+hadoop叢集,yarn的可用記憶體只有小小的40G,五個節點,每個節點8G記憶體,因此需要對每個上線的計算任務佔用的資源都要精打細算。 寫了兩個sparkstreaming的任務,發現其中一個任務用了三個container,每個container佔用了2G的記憶體,另外一個任務用了四個container,每個container佔用了2G的記憶體,這樣算下來,兩個任務一共佔用了14G 的記憶體,由於任務分配有時候不太均勻,導致有時候一個節點上就跑了個container,使得其他離線任務在佔用資源較多的時候,會出現資源競爭激烈,長時間排隊等待無法執行的情況。 而實際上,streaming的任務並不需要佔用如此多的資源,應該就可以完成任務,於是開始尋找調小任務佔用資源的方法修改spark任務提交時的引數
修改yarn.scheduler.minimum-allocation-mb
於是又是一頓百度,一頓各種文件,發現原因是這樣的, 由於我的yarn.scheduler.minimum-allocation-mb設定的比較小,當spark任務啟動的時候,會有一瞬間,記憶體的佔用會出現翻倍的情況,這個我在yarn控制檯看到過這樣的現象,然後就會恢復到正常水平,yarn中有這樣的配置 yarn.nodemanager.pmem-check-enabled 是否啟動一個執行緒檢查每個任務正使用的實體記憶體量,如果任務超出分配值,則直接將其殺掉,預設是true
yarn.nodemanager.vmem-check-enabled 是否啟動一個執行緒檢查每個任務正使用的虛擬記憶體量,如果任務超出分配值,則直接將其殺掉,預設是true
這樣就很明確了,原來是任務被yarn殺死了,