我已经在 ambari-server 中提交了我的 Spark 作业 使用以下命令..
./spark-submit --class customer.core.classname --master yarn --numexecutors 2 --driver-memory 2g --executor-memory 2g --executor-cores 1 /home/hdfs/Test/classname-0.0.1-SNAPSHOT-SNAPSHOT.jar newdata host:6667
并且运行良好...
但是即使命令提示符关闭,如何才能让它在后台运行呢?
如有任何帮助,我们将不胜感激。
您可以通过多种方式实现这一目标
1)您可以使用
nohup
在后台运行 Spark 提交驱动程序进程
例如:
nohup ./spark-submit --class customer.core.classname \
--master yarn --numexecutors 2 \
--driver-memory 2g --executor-memory 2g --executor-cores 1 \
/home/hdfs/Test/classname-0.0.1-SNAPSHOT-SNAPSHOT.jar \
newdata host:6667 &
2)以集群部署模式运行,以便驱动进程在不同节点运行。
我认为这个问题更多的是关于shell而不是spark,
要保持应用程序运行,即使在关闭 shell 时,也应该在命令末尾添加
&
。所以你的 spark-submit
命令将是(只需将 &
添加到末尾)
./spark-submit --class customer.core.classname --master yarn --numexecutors 2 --driver-memory 2g --executor-memory 2g --executor-cores 1 /home/hdfs/Test/classname-0.0.1-SNAPSHOT-SNAPSHOT.jar newdata host:6667 &
[1] 28299
您仍然可以获得日志和输出消息,除非您重定向它们
希望我理解这个问题。一般来说,如果您希望进程继续运行,您可以创建一个将在后台运行的进程文件。在您的情况下,该作业将继续运行,直到您使用yarn -kill专门终止它。因此,即使您终止 Spark 提交,它也会继续运行,因为提交后由 YARN 管理它。
警告:我没有对此进行测试。但执行您所描述的操作的更好方法可能是使用以下设置:
--deploy-mode cluster \
--conf spark.yarn.submit.waitAppCompletion=false
在这里找到: 提交后如何退出spark-submit