【发布时间】:2021-06-26 23:57:57
【问题描述】:
我在一台 EC2 机器上设置了 spark,当我连接到它时,我可以通过 jupyter 或 spark-submit 使用 spark,没有任何问题。不幸的是,我无法通过 ssh 使用 spark-submit。
所以,回顾一下:
-
这行得通:
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: Cannot run program "python": error=2, No such file or directory'
看了很多关于这个问题的文章和帖子,我认为问题是由于一些变量没有正确设置,所以我在机器的.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 作业,我会收到以下错误消息:
“找不到命令 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: Cannot run program "python": error=2, No such file or directory'
如果 SSH 似乎忽略了所有环境变量,无论我设置了多少次,我如何告诉 spark 使用哪个 python?
值得一提的是,我在一年多以前就开始接触编码和数据了,所以我真的是这里的新手,任何帮助都将不胜感激。解决方案可能非常简单,但我无法理解它。请帮忙。
提前非常感谢:)
【问题讨论】:
-
欢迎来到 SO!请参阅stackoverflow.com/help/formatting 了解如何清晰地格式化文本块。
-
谢谢@ThomasHansen :)
标签: bash apache-spark amazon-ec2 ssh