我试图在独立集群上提交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