GCP Dataproc 自定义图像 Python 环境

Cla*_*dio 7 python google-cloud-platform pyspark google-cloud-dataproc

创建 DataProc 自定义图像和 Pyspark 时遇到问题。我的自定义映像基于 DataProc 1.4.1-debian9,并使用我的初始化脚本从 requirements.txt 文件安装 python3 和一些包,然后设置 python3 env 变量以强制 pyspark 使用 python3。但是,当我在使用此映像创建的集群上提交作业(为简单起见使用单节点标志)时,该作业找不到安装的软件包。如果我登录集群机器并运行 pyspark 命令,则启动 Anaconda PySpark,但如果我使用 root 用户登录并运行 pyspark,我将使用 python 3.5.3 的 pyspark。这是一个很奇怪的现象。我不明白的是哪个用户用于创建图像?为什么我的用户和 root 用户的环境不同?我希望该映像是由 root 用户提供的,所以我希望可以从 root 用户找到我安装的所有软件包。提前致谢

Dag*_*ang 4

更新答案(2021 年第 2 季度)

customize_conda.sh脚本是为自定义映像自定义 Conda env 的推荐方法。

如果您需要的不仅仅是脚本,您可以阅读代码并创建自己的脚本,但通常您希望使用绝对路径,例如 , /opt/conda/anaconda/bin/conda, /opt/conda/anaconda/bin/pip,/opt/conda/miniconda3/bin/conda/opt/conda/miniconda3/bin/pip安装/卸载 Anaconda/Miniconda env 的软件包。

原始答案(已过时)

我建议您首先阅读配置集群的 Python 环境,其中概述了不同映像版本上的 Dataproc Python 环境,以及有关如何安装包和为 PySpark 作业选择 Python 的说明。

就你而言,1.4 已经附带了 miniconda3。初始化操作和作业以 root 身份执行。创建集群时执行/etc/profile.d/ effective-python.sh初始化Python环境。但是由于自定义映像脚本的顺序(首先)和(然后)可选组件激活顺序,miniconda3 在自定义映像构建时尚未初始化,因此您的脚本实际上自定义了操作系统的系统 Python,然后在集群创建期间,miniconda3 初始化Python 覆盖操作系统的系统Python。

我找到了一个解决方案,在您的自定义图像脚本中,在开头添加此代码,它将把您置于与您的工作相同的Python环境中:

# This is /usr/bin/python
which python 

# Activate miniconda3 optional component.
cat >>/etc/google-dataproc/dataproc.properties <<EOF
dataproc.components.activate=miniconda3
EOF
bash /usr/local/share/google/dataproc/bdutil/components/activate/miniconda3.sh
source /etc/profile.d/effective-python.sh

# Now this is /opt/conda/default/bin/python
which python 
Run Code Online (Sandbox Code Playgroud)

然后你可以安装软件包,例如:

conda install <package> -y
Run Code Online (Sandbox Code Playgroud)