【问题标题】:unable to start a job using spark-submit via ssh (on EC2)无法通过 ssh 使用 spark-submit 开始工作(在 EC2 上)
【发布时间】: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?

值得一提的是,我在一年多以前就开始接触编码和数据了,所以我真的是这里的新手,任何帮助都将不胜感激。解决方案可能非常简单,但我无法理解它。请帮忙。

提前非常感谢:)

【问题讨论】:

标签: bash apache-spark amazon-ec2 ssh


【解决方案1】:

问题确实在于我期望 shell 工作的方式(这是错误的)。

我的问题已通过以下方式解决:

  1. 在 .profile 而不是 .bashrc 中设置我的变量
  2. 提供 python 的完整路径

现在我可以通过 ssh 启动 Spark 作业了。

我在@VinkoVrsalovic 给这篇帖子的回答中找到了解决方案:

Why does an SSH remote command get fewer environment variables then when run manually?

干杯

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-21
    • 2015-12-27
    • 2012-09-04
    • 1970-01-01
    相关资源
    最近更新 更多