spark on mesos 两种运行模式
spark on mesos 有粗粒度(coarse-grained)和細粒度(fine-grained)兩種運行模式,細粒度模式在spark2.0后開始棄用。
細粒度模式
優點
spark默認運行的就是細粒度模式,這種模式支持資源的搶占,spark和其他frameworks以非常細粒度的運行在同一個集群中,每個application可以根據任務運行的情況在運行過程中動態的獲得更多或更少的資源(mesos動態資源分配),但是這會在每個task啟動的時候增加一些額外的開銷。這個模式不適合于一些低延時場景例如交互式查詢或者web服務請求等。
啟動spark-shell,啟動時不占有資源,需要運行task后才去申請
缺點
spark中運行的每個task的運行都需要去申請資源,也就是說啟動每個task都增加了額外的開銷。
在一些task數量很多,可是任務量比較輕的應用中,該開銷會被放大。
例如:
遍歷一個hdfs中擁有3w分區的數據(56億條)任務:
| 50s | 420s |
粗粒度模式
該模式的優點是啟動task的時候開銷比較小,但是該模式運行的時候每個application會一直占有一定的資源,直到整個application結束后才會釋放資源。
啟動spark-shell,啟動應用時即占有資源
可以在conf/spark-default.conf中開啟粗粒度模式
spark.mesos.coarse true在粗粒度模式下,一個application啟動時會獲取集群中所有的cpu(mesos資源邀約的所有cpu), 這會導致在這個application運行期間你無法再運行其他任務。你可以控制一個application獲取到的最大資源來解決這個問題。
例如你可以設置最大的cpu使用數
在conf/spark-default.conf中設置
這樣提交任務后,application會一直占用10個cpu,不會增加也不會減少,直到完全運行結束。
spark在1.5中提供了動態executor調整的功能,可以緩解資源長期不釋放的問題。
spark dynamic allocation
一些相關參數
| spark.mesos.coarse | false | 是否使用粗粒度模式運行spark任務| |
| spark.mesos.extra.cores | 0 | 只能在粗粒度模式下使用,為每個task增加額外的cpu,但是總的cpu數不會超過spark.cores.max設置的數量 |
| spark.mesos.mesosExecutor.cores | 1.0 | 即使spark task沒有執行,每個mesos executor也會持續的擁有這些cpu,可以設置浮點數 |
| spark.mesos.executor.memoryOverhead | executor memory * 0.10, with minimum of 384 | 每個executor額外的一些內存,單位是mb,默認情況下,該值是spark.executor.memory 的0.1倍,且不小于384mb。如果進行了設置,就會變成你設置的值 |
轉載于:https://www.cnblogs.com/xiaomaohai/p/6158059.html
總結
以上是生活随笔為你收集整理的spark on mesos 两种运行模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端基础-html-段落标签
- 下一篇: (王道408考研数据结构)第七章查找-第