我有spark应用程序,我可以为不同的客户端执行。 但我想确保在任何时刻只有2个客户端正在运行,如果一个完成执行,则开始下一次执行。 怎么做到这一点?
example:
spark-submit Prg1.py -t0000 -c123
spark-submit Prg1.py -t0000 -c456
spark-submit Prg1.py -t0000 -c789
spark-submit Prg1.py -t0000 -c012
当我在不同的会话中执行上述4个命令时,我想确保只有2个进程正在运行,剩下的只有在其中一个进程完成时才会启动。
答案 0 :(得分:0)
请参阅以下shell程序以了解您的要求。 $ USER,如果未设置此环境变量,则输入将要运行以下shell脚本的用户标识。
clients.txt
这样的文件,并在其中添加所有客户编号,如下所示
123个现在创建一个shell脚本文件spark_submit.sh
并在其中添加以下行: -
#!/usr/bin/ksh
filename="$1"
total_running_proces=`ps -fu $USER|grep -v "grep"|grep "Prg1.py"| awk '{print $2}'|wc -l`
if [ $total_running_proces -ge 1 ]; then
echo "Process is already running"
exit 0
fi
while [ 1 ]
do
total_running_proces=`ps -fu $USER|grep -v "grep"|grep "Prg1.py"| awk '{print $2}'|wc -l`
if [ $total_running_proces -le 1 ]; then
read -r line
client=$line
if [ ${client:-1} -eq 1 ]; then
break
else
spark-submit Prg1.py -t0000 -c$client > /dev/null 2>&1 &
fi
fi
sleep 10 #sleep for 10 second and release the cpu
done < "$filename"
exit 0
现在将此文件设为可执行chmod 777 spark_submit.sh
现在运行像./spark_submit.sh clients.txt
您也可以使用相同的脚本进行不同的处理。您只需更改第5行grep "pgg1.py"
和行号12 spark-submit Prg1.py -t0000 -c$client
如果您需要更多帮助,请告诉我。