spark on yarn 的資源排程器設定.

babyyellow發表於2017-03-20
最近一段時間 發現了一個問題. 就是即便在整個叢集  不忙的時候, 也會某幾個節點, 會被spark on yarn 的任務跑滿. 

而不是把任務均勻的分配到到多幾個節點上. 

百思不解. 

於是開始各個方面的調查.  從spark 方面沒有發現什麼問題. 回過頭來看yarn . 

發現原來使我們的資源排程的配置上有點問題. 


  <property>
    <name>yarn.scheduler.capacity.resource-calculator</name>
    <!--value>org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator</value-->
    <value>org.apache.hadoop.yarn.util.resource.DominantResourceCalculator</value>
    <description>
      The ResourceCalculator implementation to be used to compare
      Resources in the scheduler.
      The default i.e. DefaultResourceCalculator only uses Memory while
      DominantResourceCalculator uses dominant-resource to compare
      multi-dimensional resources such as Memory, CPU etc.
    </description>
  </property>


問題就出在這裡了.  default  排程器, 只關注node 的記憶體 情況, 根據記憶體情況來分派任務. 
這就是導致, 如果一個spark 任務向yarn 申請container 的時候, yarn 只關注了 某幾個點的記憶體情況. 

如果記憶體滿足 spark 的要求, 就可能把所有的container 都分派到一個node 去,導致這個node 節點 負載飈高. 

比如 spark 申請 10個 1g 記憶體的container . 然後 yarn 發現有2個節點  各有5g 空閒記憶體,  但是卻只有3個cpu 空閒. 

那麼可能就會只有這倆node 來跑這10個container , 而不是把10個container 分配到10個node上去.

然後就出現我們前面說的情況.  記憶體充足但是cpu不足. 導致spark 的container 只有3個在執行. 另外倆個要等待 .  

這也符合我們前面看到的現象.  




來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/133735/viewspace-2135645/,如需轉載,請註明出處,否則將追究法律責任。

相關文章