Spark叢集無法停止的原因分析和解決

來源:互聯網
上載者:User

標籤:

今天想停止spark叢集,發現執行stop-all.sh的時候spark的相關進程都無法停止。提示:

no org.apache.spark.deploy.master.Master to stop

no org.apache.spark.deploy.worker.Worker to stop

上網查了一些資料,再翻看了一下stop-all.sh,stop-master.sh,stop-slaves.sh,spark-daemon.sh,spark-daemons.sh等指令碼,發現很有可能是由於$SPARK_PID_DIR的一個環境變數導致。

1. 原因分析

我搭建的是Hadoop2.6.0+Spark1.1.0+Yarn的叢集。Spark、Hadoop和Yarn的停止,都是通過一些xxx.pid檔案來操作的。以spark的stop-master為例,其中停止語句如下:

再查看spark-daemon.sh中的操作:

$SPARK_PID_DIR中存放的pid檔案中,就是要停止進程的pid。其中$SPARK_PID_DIR預設是在系統的/tmp目錄:

系統每隔一段時間就會清除/tmp目錄下的內容。到/tmp下查看一下,果然沒有相關進程的pid檔案了。這才導致了stop-all.sh無法停止叢集。

2. 停止Spark叢集

擔心使用kill強制停止spark相關進程會破壞叢集,因此考慮回複/tmp下的pid檔案,再使用stop-all.sh來停止叢集。

分析spark-daemon.sh指令碼,看到pid檔案命名規則如下:

pid=$SPARK_PID_DIR/spark-$SPARK_IDENT_STRING-$command-$instance.pid

其中

$SPARK_PID_DIR是/tmp

$SPARK_IDENT_STRING是登入使用者$USER,我的叢集中使用者名稱是cdahdp

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

org.apache.spark.deploy.master.Master

org.apache.spark.deploy.worker.Worker

$instance也是調用spark-daemon.sh時的參數,我的叢集中是1

因此pid檔案名稱如下:

/tmp/spark-cdahdp-org.apache.spark.deploy.master.Master-1.pid

/tmp/spark-cdahdp-org.apache.spark.deploy.worker.Worker-1.pid

通過jps查看相關進程的pid:

將pid儲存到對應的pid檔案即可。

之後調用spark的stop-all.sh,即可正常停止spark叢集。

3. 停止Hadoop和Yarn叢集

停止hadoop和yarn叢集時,調用stop-all.sh,也會出現這個現象。其中NameNode,SecondaryNameNode,DataNode,NodeManager,ResourceManager等就是hadoop和yarn的相關進程,stop時由於找不到pid導致無法停止。分析方法同spark,對應pid檔案名稱不同而已。

Hadoop的pid命名規則:

pid=$HADOOP_PID_DIR/hadoop-$HADOOP_IDENT_STRING-$command.pid

pid檔案名稱:

/tmp/hadoop-cdahdp-namenode.pid

/tmp/hadoop-cdahdp-secondarynamenode.pid

/tmp/hadoop-cdahdp-datanode.pid

Yarn的pid命名規則:

pid=$YARN_PID_DIR/yarn-$YANR_IDENT_STRING-$command.pid

pid檔案名稱:

/tmp/yarn-cdahdp-resourcemanager.pid

/tmp/yarn-cdahdp-nodemanager.pid

恢複這些pid檔案即可使用stop-all.sh停止hadoop和yarn進程。

4. 根治方案

要根治這個問題,只需要在叢集所有節點都設定$SPARK_PID_DIR, $HADOOP_PID_DIR和$YARN_PID_DIR即可。

修改hadoop-env.sh,增加:

export HADOOP_PID_DIR=/home/ap/cdahdp/app/pids

修改yarn-env.sh,增加:

export YARN_PID_DIR=/home/ap/cdahdp/app/pids

修改spark-env.sh,增加:

export SPARK_PID_DIR=/home/ap/cdahdp/app/pids

啟動叢集以後,查看/home/ap/cdahdp/app/pids目錄,如下:

 

Spark叢集無法停止的原因分析和解決

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.