GCP Dataproc 自定义映像 Python 环境

GCP Dataproc custom image Python environment

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

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

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

如果您需要的不仅仅是脚本,您可以阅读代码并创建自己的脚本,但通常您希望使用绝对路径,例如 /opt/conda/anaconda/bin/conda/opt/conda/anaconda/bin/pip、[= Anaconda/Miniconda 环境的 14=]、/opt/conda/miniconda3/bin/pip 到 install/uninstall 包。

原始答案(已过时)

我建议您先阅读 Configure the cluster's Python environment,其中概述了 Dataproc 在不同图像版本上的 Python 环境,以及有关如何安装软件包和 select Python 用于 PySpark 作业。

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

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

conda install <package> -y