操作場景
? ? ? ? Spark on?YARN模式下,有Driver、ApplicationMaster宣渗、Executor三種進程吨铸。在任務調(diào)度和運行的過程中行拢,Driver和Executor承擔了很大的責任,而ApplicationMaster主要負責container的啟停诞吱。
? ? ? ? 因而Driver和Executor的參數(shù)配置對spark應用的執(zhí)行有著很大的影響意義舟奠。用戶可通過如下操作對Spark集群性能做優(yōu)化。
操作步驟
1. 配置Driver內(nèi)存房维。
Driver負責任務的調(diào)度沼瘫,和Executor、AM之間的消息通信咙俩。當任務數(shù)變多耿戚,任務平行度增大時湿故,Driver內(nèi)存都需要相應增大∧せ祝可以根據(jù)實際任務數(shù)量的多少坛猪,為Driver設置一個合適的內(nèi)存。
● 將“spark-defaults.conf”中的“spark.driver.memory”配置項或者“spark-env.sh”中的“SPARK_DRIVER_MEMORY”配置項設置為合適大小皂股。
● 在使用spark-submit命令時墅茉,添加“--driver-memory MEM”參數(shù)設置內(nèi)存。
2. 配置Executor個數(shù)呜呐。
每個Executor每個核同時能跑一個task就斤,所以增加了Executor的個數(shù)相當于增大了任務的并發(fā)度。在資源充足的情況下蘑辑,可以相應增加Executor的個數(shù)洋机,以提高運行效率。
● 將 “spark-defaults.conf” 中的 “spark.executor.instance” 配置項或者 “spark-env.sh” 中的 “SPARK_EXECUTOR_INSTANCES” 配置項設置為合適大小以躯。還可以設置動態(tài)資源調(diào)度功能進行優(yōu)化槐秧,詳情請參見?www.reibang.com/writer#/notebooks/15701476/notes/16128092?。
● 在使用spark-submit命令時忧设,添加“--num-executors NUM”參數(shù)設置Executor個數(shù)刁标。
3. 配置Executor核數(shù)。
每個Executor多個核同時能跑多個task址晕,相當于增大了任務的并發(fā)度膀懈。但是由于所有核共用Executor的內(nèi)存,所以要在內(nèi)存和核數(shù)之間做好平衡谨垃。
● 將“spark-defaults.conf”中的“spark.executor.cores”配置項或者“spark-env.sh”中的“SPARK_EXECUTOR_CORES”配置項設置為合適大小启搂。
● 在使用spark-submit命令時,添加“--executor-cores NUM”參數(shù)設置核數(shù)刘陶。
4. 配置Executor內(nèi)存胳赌。
Executor的內(nèi)存主要用于任務執(zhí)行、通信等匙隔。當一個任務很大的時候疑苫,可能需要較多資源,因而內(nèi)存也可以做相應的增加纷责;當一個任務較小運行較快時捍掺,就可以增大并發(fā)度減少內(nèi)存。
● 將“spark-defaults.conf”中的“spark.executor.memory”配置項或者“spark-env.sh”中的“SPARK_EXECUTOR_MEMORY”配置項設置為合適大小再膳。
● 在使用spark-submit命令時挺勿,添加“--executor-memory MEM”參數(shù)設置內(nèi)存。
例子
在執(zhí)行spark wordcount計算中喂柒。1.6T數(shù)據(jù)不瓶,250個executor禾嫉。
在默認參數(shù)下執(zhí)行失敗,出現(xiàn)Futures?timed out 和 OOM 錯誤湃番。
因為數(shù)據(jù)量大夭织,task數(shù)多,而wordcount每個task都比較小吠撮,完成速度快尊惰。當task數(shù)多時driver端相應的一些對象就變大了,而且每個task完成時executor和driver都要通信泥兰,這就會導致由于內(nèi)存不足弄屡,進程之間通信斷連等問題。
當把Driver的內(nèi)存設置到4g時鞋诗,應用成功跑完膀捷。
使用ThriftServer執(zhí)行TPC-DS測試套,默認參數(shù)配置下也報了很多錯誤:Executor
Lost等削彬。而當配置Driver內(nèi)存為30g全庸,executor核數(shù)為2,executor個數(shù)為125融痛,executor內(nèi)存為6g時壶笼,所有任務才執(zhí)行成功。