【问题标题】:How to ship and run spark-submit with virtualenv如何使用 virtualenv 发送和运行 spark-submit
【发布时间】:2021-11-03 11:11:43
【问题描述】:

我正在尝试在独立集群上提交 spark 作业,我已将 virtualenv 压缩为 venv.zip,并将作业作为 shell 脚本提交

#!/bin/sh
PYSPARK_PYTHON=./venv/bin/python \
PYSPARK_DRIVER_PYTHON=./venv/bin/python 
spark-submit \
--jars ojdbc6.jar \
--master spark://HOST:7077 \
--archives venv.zip#venv \
job.py

但我不断收到模块找不到,即使它存在于 venv 中并且在本地模式下运行良好。

我也尝试登录worker节点并尝试运行venv,手动激活virtualenv后,可以找到模块,脚本似乎使用系统范围的python,我该如何解决这个问题?

【问题讨论】:

  • 您找到解决方案了吗?
  • @Ryan,是的,已更新
  • 感谢您的更新!希望为在 CI 管道上运行单元测试的本地集群实现此设置。你在做类似的事情吗?
  • 正如我所提到的,概念是一样的,所有节点都需要访问相同的“路径”,要么是共享路径,要么是每个节点上的复制路径

标签: apache-spark pyspark virtualenv


【解决方案1】:

我可以使用下面的 sn-p 来完成,基本上,我压缩了 venv 内容并将 venv 放入 HDFS(如果您没有 HDFS 或节点的任何共享可访问位置),如果您没有没有...那么我认为您可以在同一路径下的所有节点上克隆虚拟环境

#!/bin/sh
PYSPARK_PYTHON=./venv/bin/python \
PYSPARK_DRIVER_PYTHON=./venv/bin/python \
spark-submit \
--conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=./venv/bin/python \
--conf spark.executorEnv.PYSPARK_PYTHON=./venv/bin/python \
--conf spark.yarn.dist.archives=hdfs:///user/sw/python-envs/venv.zip#venv \
--conf spark.yarn.appMasterEnv.HADOOP_USER_NAME=hdfs \
--conf spark.executorEnv.HADOOP_USER_NAME=hdfs \
--master yarn \
--deploy-mode cluster \
--py-files p1.py,p2.py \
main.py

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-24
    • 2015-06-08
    • 2020-10-01
    • 2020-08-22
    • 1970-01-01
    • 1970-01-01
    • 2019-03-10
    相关资源
    最近更新 更多