解決Spark集群無法停止


執行stop-all.sh時,出現報錯:no org.apache.spark.deploy.master.Master to stop,no org.apache.spark.deploy.worker.Worker to stop

 

原因:

Spark的停止,是通過一些.pid文件來操作的。

查看spark-daemon.sh文件,其中一行:$SPARK_PID_DIR  The pid files are strored .  /tmp by default .

$SPARK_PID_DIR存放的pid文件中,就是要停止的進程的pid,其中$SPARK_PID_DIR默認是在系統的/tmp目錄。

系統每隔一段時間就會清除/tmp目錄下的內容。到/tmp下查看,如果沒有Spark相關.pid文件,這就是導致Spark集群無法停止的原因。

 

解決:

查看spark-daemon.sh文件中.pid文件命名規則,其中一行:pid=$SPARK_PID_DIR/spark-$SPARK_IDENT_STRING-$command-$instance.pid

其中

$SPARK_PID_DIR是/tmp

$SPARK_IDENT_STRING是登錄用戶$USER,我的用戶名是root

$command是調用spark-daemon.sh時的參數,有兩個:

org.apache.spark.deploy.master.Master

org.apache.spark.deploy.worker.Worker

$instance也是調用spark-daemon.sh時的參數

 

因此pid文件名如下:

spark-cdahdp-org.apache.spark.deploy.master.Master-1.pid(在master機器中/tmp下創建)

spark-cdahdp-org.apache.spark.deploy.worker.Worker-1.pid(在每一台worker機器中/tmp下創建,如果一台機器開啟了多個worker,就創建多個.pid文件,文件名最后的數字依次遞增)

通過jps查看所有機器相關進程(master、worker)的pid數字。編輯所有.pid文件,把pid數字一一對應寫入.pid文件,最后每個.pid文件中都是一個進程號。

然后執行spark的stop-all.sh,即可正常停止spark集群。

 

徹底解決:

在集群所有節點編輯spark-env.sh,增加一行:export SPARK_PID_DIR=/home/ap/root/app/pids

刪除之前自己創建的所有.pid文件。

然后可以啟動spark集群了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM