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