如何使用virtualenv运送和运行spark提交



我试图在独立集群上提交spark作业,我已经将虚拟机压缩为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,我该如何解决这个问题?

我可以用下面的片段来完成,基本上,我压缩了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

最新更新