无法通过ssh使用spark submit启动作业(在ec2上)

lvjbypge  于 2021-07-09  发布在  Spark
关注(0)|答案(1)|浏览(314)

我在一台ec2机器上设置了spark,当我连接到它时,我可以使用带有jupyter或spark submit的spark,没有任何问题。不幸的是,我不能通过ssh使用spark提交。
所以,概括一下:
这样做有效:

ubuntu@ip-198-43-52-121:~$ spark-submit job.py

这不起作用:

ssh -i file.pem ubuntu@blablablba.compute.amazon.com "spark-submit job.py"

最初,我不断收到以下错误消息:
'java.io.ioexception:无法运行程序“python”:错误=2,没有这样的文件或目录'
在阅读了许多关于这个问题的文章和帖子之后,我认为这个问题是由于一些变量没有正确设置,所以我在机器的.bashrc文件中添加了以下几行:

export SPARK_HOME=/home/ubuntu/spark-3.0.1-bin-hadoop2.7 #(it's where i unzipped the spark file)
export PATH=$SPARK_HOME/bin:$PATH
export PYTHONPATH=/usr/bin/python3
export PYSPARK_PYTHON=python3

(由于错误消息引用了python,我还尝试将行“alias python=python3”添加到.bashrc中,但没有任何更改)
在所有这些之后,如果我尝试通过ssh提交spark作业,会收到以下错误消息:
“未找到command spark submit”。
由于系统在通过ssh发送命令时似乎忽略了所有环境变量,因此我决定在尝试运行spark作业之前,先获取机器的.bashrc文件的源代码。由于我不确定通过ssh发送多个命令的最合适方式,我尝试了以下所有方式:

ssh -i file.pem ubuntu@blabla.compute.amazon.com "source .bashrc; spark-submit job.file"

ssh -i file.pem ubuntu@blabla.compute.amazon.com << HERE
source .bashrc
spark-submit job.file
HERE 

ssh -i file.pem ubuntu@blabla.compute.amazon.com <<- HERE
source .bashrc
spark-submit job.file
HERE

(ssh -i file.pem ubuntu@blabla.compute.amazon.com "source .bashrc; spark-submit job.file")

所有的尝试都与其他命令(如ls或mkdir)一起工作,但与source和spark submit无关。
我还尝试提供运行以下行的完整路径:

ssh -i file.pem ubuntu@blabla.compute.amazon.com "/home/ubuntu/spark-3.0.1-bin-hadoop2.7/bin/spark-submit job.py"

在这种情况下,我再次得到以下信息:
'java.io.ioexception:无法运行程序“python”:错误=2,没有这样的文件或目录'
如果ssh似乎忽略了所有的环境变量,不管我设置了多少次,我如何告诉spark使用哪种python呢?
值得一提的是,我一年多前就开始学习编码和数据了,所以我在这里真的是个新手,任何帮助都将不胜感激。解决办法可能很简单,但我想不通。请帮忙。
提前多谢:)

xfb7svmp

xfb7svmp1#

问题确实出在我期望shell工作的方式上(这是错误的)。
我的问题得到了解决:
在.profile而不是.bashrc中设置变量
提供python的完整路径
现在我可以通过ssh启动spark作业。
我在@vinkovrsalovic给这个帖子的答案中找到了解决办法:
为什么ssh远程命令在手动运行时获得的环境变量更少?
干杯

相关问题