我正在尝试使用azure synapse来运行spark作业。根据文档,Synapse允许通过工作区包安装第三方库
然而,在azure synapse命令参考中,我可以看到它支持archives选项这是否意味着我可以从blob存储中引用打包的conda环境,并确保所有必要的包在所有节点中可用?
为了进行模拟,我创建了一个小型conda环境,其中包含单个外部包humanize
conda create -y -n hornet_conda_env
conda activate hornet_conda_env
conda install -c conda-forge humanize
conda pack -f -o hornet_conda_env.tar.gz
作为script.py
的条目spark作业文件
import humanize
import datetime as dt
print(humanize.naturalday(dt.datetime.now()))
脚本和conda环境包(hornet_conda_env.tar.gz
)被上传到Azure Blob存储,并使用对脚本的引用创建一个spark作业。
spark作业定义通过az cli
命令行调用,如下所示:
az synapse spark job submit \
--workspace-name <workspace_name> \
--spark-pool-name <pool_name>
--executor-size Small
--executors 2
--language PySpark
--main-definition-file abfss://<full_path_for_entry_spark_job>.script.py \
--name <name> \
--archives abfss://<full_path_for_conda_package>/hornet_conda_env.tar.gz
脚本执行失败,并显示错误ModuleNotFoundError: No module named 'humanize'
,这意味着conda环境未按照归档文件中的引用安装。
synapse允许这种conda环境的打包和分发吗?
更新1
我试图在本地使用这个软件包,我无法使用相同的。我试图在conda环境之外使用它,我得到了与ModuleNotFoundError: No module named 'humanize'
相同的问题
PYSPARK_PYTHON=/Users/<username>/opt/anaconda3/bin/python3 \
spark-submit \
--master "local[3]" \
--conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=/Users/<username>/opt/anaconda3/bin/python3 \
--archives ~/workspace/cuezen/hornet/hornet_env.tar.gz#environment \
~/workspace/cuezen/hornet/hornet.py
2条答案
按热度按时间mkh04yzy1#
按照以下步骤来摆脱模块找不到错误:
1.在终端中启用虚拟环境。下面是一些命令:
1.确保这更多的是目前在网站包。
1.如果它不存在,通过与azure-python-sdk或humanize模块进行比较来显式添加它。
wvmv3b1j2#
您需要将
--configuration
参数和覆盖传递给spark.yarn.appMasterEnv.PYSPARK_PYTHON
配置。事并在本地创建一个包含这些内容的json文件
不幸的是,这会导致synapse池使用这个环境,而不是默认的环境,这可能意味着你需要在那里添加所有的依赖项(但是文件可能很大)。
如果你找到一种方法来加载两个环境的依赖关系,请告诉我。
编辑:做了一些研究,你将需要基本的yml文件的环境工作,这是大约4.5GB。