如何使用nohup从文件执行spark-shell?

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

我有一个 scala 脚本文件,它通过交互式 Spark-shell 以经典方式成功执行:输入 Spark-shell,粘贴脚本,等待完成。

我希望能够让这个东西继续工作并退出 ssh 会话,在需要时返回结果。

我尝试过这个,但它的行为很奇怪

spark-shell -i file.scala >> out.log 2>&1 &

它仅将几行常见的 Spark 输出打印到 out.log,然后报告进程已结束。当我做 'ps aux | 时grep Spark' 我看到进程之间有 Spark 正在运行。

当我运行它时,它的行为符合预期,但我必须保持会话打开才能得到结果。

spark-shell -i file.scala

有没有办法让spark-shell与nohup正常工作?

我知道 Spark-Submit 可以与 jar 一起使用,但感觉不太直观,对于一个简单的测试,我必须组装一个 jar 并执行 Maven 魔法。

apache-spark
6个回答
6
投票

我遇到了

spark-shell
nohup
相同的行为。其背后的原因尚不清楚,但可以使用
tmux
代替
nohup
作为解决方法。关于如何使用
tmux
的非常好的指南可以在这里找到。

可能的操作如下:

$ tmux new -s session-name
$ ./bin/spark-shell
# do usual stuff manually

然后,如果您关闭终端窗口并退出 ssh 会话,您可以像这样重新进入

tmux
会话:

$ tmux attach -t session-name

4
投票

我使用shell脚本来执行

spark-shell
,在
my-script.sh
里面:

$SPARK_HOME/bin/spark-shell < $HOME/test.scala > $HOME/test.log 2>&1 &

通过谷歌搜索在某个地方阅读它并尝试一下。它正在为我服务。


4
投票

如果您尝试在

aws-cli
上执行它,那么您可以使用以下命令..

nohup bash -c "YOUR_COMMAND 2>&1 &"

因此要执行spark-shell

nohup bash -c "spark-shell -i  file.scala >> out.log 2>&1 &"

2
投票

我参加聚会有点晚了,但我最近发现了另一个解决方案:

echo ":load myscript.scala" | nohup $SPARK_HOME/bin/spark-shell [other args]

其他参数代表传递给spark-shell的更多参数(而不是你的脚本;我还没有测试该部分)。我在脚本末尾有一个 df.write() 调用,因此结果被保存到 HDFS - 不需要将它们打印在屏幕上。请注意,我不需要在命令末尾添加 &。

我尝试关闭 SSH 连接,并且 Spark-shell 作业根据 Spark UI 继续运行任务:-)


1
投票

老问题,但你真的尝试过使用

nohup
命令吗?

仅使用

&
将进程置于后台并不会阻止进程在收到 SIGHUP 信号时退出,这是进程在您注销时收到的信号。

试试这个:

nohup spark-shell -i file.scala >> out.log &

0
投票

如果您想在 aws bash / ec2/ emr 中以客户端模式执行 nohup bash -c“spark-shell --deploy-mode client -i your_script.scala >> out.log 2>&1 &”

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