Spark任務失敗 Container be Killed 案情分析

      網友投稿 962 2022-05-29

      1.案情

      很單純的講,就是一個spark程序以yarn-cluster的模式運行在yarn集群上,經常遇到Lost executor? ?Container be killed by yarn for exceed memory limits

      2.spark大致架構

      3、案發現場

      從日志可以看出,Container被殺掉,Executor丟失,導致stage中的task也失敗,大致原因可以看出,堆內存基本被全部用完,同時建議設置spark.yarn.executor.memoryOverhead。

      想要解決問題,首先得明白container,executor,task之間的資源分配以及相互關系,才能知道怎么合理調整資源使得任務順利運行。

      4.yarn資源分配

      當spark任務運行在yarn集群上時,Yarn的ResourceMananger用來管理集群資源,集群上每個節點上的NodeManager用來管控所在節點的資源,從yarn的角度來看,每個節點看做可分配的資源池,當向ResourceManager請求資源時,NodeManager將會以execution container的資源形式返回,其實就是個JVM進程,提供了任務運行的各種資源,主要包括,cpu,內存,磁盤IO/網絡等資源。

      想必大家會有以下疑問

      1、??container資源來自何方?

      從上述可以知道,container資源來自于NodeManager的資源分配,來自于node節點。

      2、??一個Container可以分配多少個executor?

      參數yarn.nodemanager.resource.memory-mb,該參數是設置nodemanager申請到用于所有container的內存總量,單位為M。

      在yarn集群上,可以通過參數executor-nums指定executor個數,executor-memory指定每個executor的內存大小,默認為1G,因此,一個Container可以分配的executor個數 = container的內存大小/executor-memory內存值。

      其中,每個executor可用的內存主要由分配的堆內存和堆外內存構成,堆內存即executor-memory,堆外存由默認值和設置值來決定,即Max(executor-memory*0.1,384M)即為該executor的堆外內存。

      3、任務并行度

      yarn集群上,可以通過設置executor-nums和executor-cores來設置Job的task并行度,如果設置了50個executor,每個ececutor3核,即job的每個stage理論上都會有150個task并行運行,但是如果設置了參數spark.defalut.parallelism,真正的并行度為Min(spark.defalut.parallelism,150),這里暫時不討論并行度的合理設置。

      5. 案情分析

      Container進程被殺掉,因為executor的內存使用超過了Container的內存總量;task運行在executor中的時候,使用的內存可能會超過executor-memory,所以會為executor額外預留一部分內存,即日志里面提示的spark.yarn.executor.memoryOverhead代表了這部分內存,如果沒有設置就會根據公式自動計算:

      其中,MEMORY_OVERHEAD_FACTOR默認為0.1,executorMemory為設置的executor-memory, MEMORY_OVERHEAD_MIN默認為384m。參數MEMORY_OVERHEAD_FACTOR和MEMORY_OVERHEAD_MIN一般不能直接修改。

      主要原因還是executor的內存不足引起的,解決方法如下:

      1、如果集群資源充足,可以適當增大executor-memory,如果executor內存充足就不會使用到堆外內存,該方法利用充足的資源換取了性能。

      2、如果集群資源有限,可以適當降低executor內task的并行度,使得executor消耗的內存變小,犧牲了部分性能換取任務的順利運行。

      3、配置參數spark.yarn.executor.memoryOverhead,增加executor可利用的總內存,一般建議設置為原來memoryOverhead倍數。

      Spark任務失敗 Container be Killed 案情分析

      6.總結

      遇到spark中executor task運行資源不足的情況,在無性能問題的前提下可以根據數據計算量適當增加內存滿足需求,在一定范圍內,增加資源的分配與性能的提升是成正比的。但是也得考慮自身實際情況,權衡資源和性能,資源充足可以用資源換性能,資源有限,優先保障功能正常運行。

      軟件開發 云計算

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:快速了解鏈碼是什么?
      下一篇:HBase是怎樣從HFile中找到某個rowkey
      相關文章
      亚洲欧美日韩综合久久久久| 亚洲第一街区偷拍街拍| 亚洲毛片网址在线观看中文字幕 | 国产亚洲福利在线视频| 亚洲精品中文字幕乱码影院| 久久精品国产亚洲AV麻豆~| 亚洲精品无码MV在线观看| 亚洲中文字幕久久精品无码喷水 | 亚洲色欲久久久综合网东京热| 亚洲国产免费综合| 狠狠色婷婷狠狠狠亚洲综合| 亚洲成av人片在线观看天堂无码| 亚洲AV无码专区日韩| 亚洲精品岛国片在线观看| 亚洲情a成黄在线观看| 国产啪亚洲国产精品无码| 国产亚洲AV夜间福利香蕉149 | 国内精品久久久久影院亚洲| 亚洲精品第一国产综合野| 学生妹亚洲一区二区| 亚洲国产精品无码久久98| 亚洲AV无码成人精品区日韩 | 亚洲AV中文无码乱人伦| 亚洲精品97久久中文字幕无码| 亚洲精品国产高清嫩草影院| 久久久久亚洲爆乳少妇无 | 亚洲色www永久网站| 久久精品国产亚洲AV| 亚洲国产成人爱av在线播放| 久久久久久久亚洲精品| 亚洲AV无码国产丝袜在线观看| 亚洲国产成人久久精品动漫| 亚洲人成影院午夜网站| 亚洲色大成网站www尤物| 日韩亚洲精品福利| 黑人大战亚洲人精品一区| 亚洲成av人片在线观看无码不卡| 亚洲久本草在线中文字幕| 亚洲av无码专区在线| 亚洲av日韩专区在线观看| 亚洲人成网站在线观看青青|