为了使这种依赖分发方法能够与编译扩展一起使用,我们需要做两件事:
- 在与目标集群相同的操作系统上运行pip install(最好在集群的主节点上)。这样可确保兼容的二进制文件包含在您的zip中。
- 将归档文件解压缩到目标节点上。这是必需的,因为Python不会从zip文件导入已编译的扩展名。(https://docs.python.org/3.8/library/zipimport.html)
使用以下脚本创建依赖项zip将确保您与系统上已安装的任何软件包隔离。假设已安装virtualenv
requirements.txt并存在于当前目录中,并
dependencies.zip在根级别输出包含所有依赖项的a
。
env_name=temp_env# create the virtual envvirtualenv --python=$(which python3) --clear /tmp/${env_name}# activate the virtual envsource /tmp/${env_name}/bin/activate# download and install dependenciespip install -r requirements.txt# package the dependencies in dependencies.zip. the cd magic works around the fact that you can't specify a base dir to zip(cd /tmp/${env_name}/lib/python*/site-packages/ && zip -r - *) > dependencies.zip现在就可以部署,解压缩依赖项并将其包含在PYTHONPATH中
spark-submit --master yarn --deploy-mode cluster --conf 'spark.yarn.dist.archives=dependencies.zip#deps' --conf 'spark.yarn.appMasterEnv.PYTHonPATH=deps' --conf 'spark.executorEnv.PYTHonPATH=deps' ...
spark.yarn.dist.archives = dependencies.zip#deps
分发您的zip文件并将其解压缩到一个名为
deps
spark.yarn.appMasterEnv.PYTHonPATH = deps
spark.executorEnv.PYTHonPATH = deps
包括
depsPYTHONPATH中用于主服务器和所有工作程序的目录
--deploy-mode集群
在 集群上 运行主执行器,因此可以选择依赖项



