由Zeppelin以纱线簇模式启动的Spark(Yarn)应用程序在停止Zeppein后不会被杀死

问题描述 投票:0回答:1

我正在运行Zeppelin 0.8.1,并将其配置为将Spark作业提交到Yarn 2.7.5集群,并且解释器都处于集群模式(因为AM在纱线上运行,而不在驱动程序主机上运行,并处于客户端模式。

我停止Zeppelin服务器后,以客户端模式启动的yarn应用程序立即被杀死。但是,以群集模式启动的作业变得像僵尸一样,并开始占用Yarn群集中的所有资源(无动态资源分配)。

是否有办法让齐柏林飞艇在退出时杀死那些工作?或解决此问题的任何方法?

apache-spark yarn apache-zeppelin
1个回答
0
投票

从版本0.8开始,Zeppelin提供了通过设置zeppelin.interpreter.lifecyclemanager.timeout.threshold来关闭空闲解释器的参数。

请参见Interpreter Lifecycle Management

在此之前,我使用了一个简单的shell脚本,该脚本检查了yarn上正在运行的应用程序,并在闲置1小时以上时将其杀死:

max_life_in_mins=60

zeppelinApps=`yarn application -list 2>/dev/null | grep "RUNNING" | grep "Zeppelin Spark Interpreter" | awk '{print $1}'`

for jobId in $zeppelinApps
do
    finish_time=`yarn application -status $jobId 2>/dev/null | grep "Finish-Time" | awk '{print $NF}'`
    if [ $finish_time -ne 0 ]; then
      echo "App $jobId is not running"
      exit 1
    fi

    time_diff=`date +%s`-`yarn application -status $jobId 2>/dev/null | grep "Start-Time" | awk '{print $NF}' | sed 's!$!/1000!'`
    time_diff_in_mins=`echo "("$time_diff")/60" | bc`

    if [ $time_diff_in_mins -gt $max_life_in_mins ]; then
      echo "Killing app $jobId"
      yarn application -kill $jobId
    fi
done 

还有纱线REST API做同样的事情。

© www.soinside.com 2019 - 2024. All rights reserved.