本篇內(nèi)容介紹了“Spark怎么進行動態(tài)資源分配”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!
創(chuàng)新互聯(lián)公司2013年至今,先為鄱陽等服務建站,鄱陽等地企業(yè),進行企業(yè)商務咨詢服務。為鄱陽企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務解決您的所有建站問題。
對于Spark應用來說,資源是影響Spark應用執(zhí)行效率的一個重要因素。當一個長期運行的服務,若分配給它多個Executor,可是卻沒有任何任務分配給它,而此時有其他的應用卻資源緊張,這就造成了很大的資源浪費和資源不合理的調(diào)度。
動態(tài)資源調(diào)度就是為了解決這種場景,根據(jù)當前應用任務的負載情況,實時的增減Executor個數(shù),從而實現(xiàn)動態(tài)分配資源,使整個Spark系統(tǒng)更加健康。
開啟動態(tài)分配策略后,application會在task因沒有足夠資源被掛起的時候去動態(tài)申請資源,這種情況意味著該application現(xiàn)有的executor無法滿足所有task并行運行。spark一輪一輪的申請資源,當有task掛起或等待spark.dynamicAllocation.schedulerBacklogTimeout
(默認1s)`時間的時候,會開始動態(tài)資源分配;之后會每隔spark.dynamicAllocation.sustainedSchedulerBacklogTimeout(默認1s)時間申請一次,直到申請到足夠的資源。每次申請的資源量是指數(shù)增長的,即1,2,4,8等。
之所以采用指數(shù)增長,出于兩方面考慮:其一,開始申請的少是考慮到可能application會馬上得到滿足;其次要成倍增加,是為了防止application需要很多資源,而該方式可以在很少次數(shù)的申請之后得到滿足。
當application的executor空閑時間超過spark.dynamicAllocation.executorIdleTimeout(默認60s)
后,就會被回收。
首先需要對YARN進行配置,使其支持Spark的Shuffle Service。
修改每臺集群上的yarn-site.xml:
- 修改yarn.nodemanager.aux-services mapreduce_shuffle,spark_shuffle
- 增加yarn.nodemanager.aux-services.spark_shuffle.class org.apache.spark.network.yarn.YarnShuffleService spark.shuffle.service.port 7337
將$SPARKHOME/lib/spark-X.X.X-yarn-shuffle.jar拷貝到每臺NodeManager的${HADOOPHOME}/share/hadoop/yarn/lib/下, 重啟所有修改配置的節(jié)點。
2、Spark的配置
配置$SPARK_HOME/conf/spark-defaults.conf,增加以下參數(shù):
spark.shuffle.service.enabled true //啟用External shuffle Service服務spark.shuffle.service.port 7337 //Shuffle Service默認服務端口,必須和yarn-site中的一致spark.dynamicAllocation.enabled true //開啟動態(tài)資源分配spark.dynamicAllocation.minExecutors 1 //每個Application最小分配的executor數(shù)spark.dynamicAllocation.maxExecutors 30 //每個Application最大并發(fā)分配的executor數(shù)spark.dynamicAllocation.schedulerBacklogTimeout 1s spark.dynamicAllocation.sustainedSchedulerBacklogTimeout 5s
使用spark-sql On Yarn執(zhí)行SQL,動態(tài)分配資源。以yarn-client模式啟動ThriftServer:
cd $SPARK_HOME/sbin/./start-thriftserver.sh \--master yarn-client \--conf spark.driver.memory=10G \--conf spark.shuffle.service.enabled=true \--conf spark.dynamicAllocation.enabled=true \--conf spark.dynamicAllocation.minExecutors=1 \--conf spark.dynamicAllocation.maxExecutors=300 \--conf spark.dynamicAllocation.sustainedSchedulerBacklogTimeout=5s
啟動后,ThriftServer會在Yarn上作為一個長服務來運行。
“Spark怎么進行動態(tài)資源分配”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!