GCP Dataproc定制镜像Python环境

7
我在创建DataProc自定义镜像和Pyspark时遇到了问题。我的自定义镜像基于DataProc 1.4.1-debian9,然后通过初始化脚本安装Python3以及从requirements.txt文件中安装一些软件包,接着设置Python3环境变量以强制Pyspark使用Python3。但是当我在使用这个镜像创建的集群上(为了简单起见,使用单节点标志),提交一个作业时,该作业无法找到所安装的软件包。如果我登录集群机器并运行pyspark命令,它会启动Anaconda PySpark,但是如果我用root用户登录并运行pyspark,我得到的是带有Python 3.5.3的pyspark。这非常奇怪。我不明白的是哪个用户用于创建镜像?为什么我的用户和root用户有不同的环境?我期望镜像是由root用户配置的,因此我预计所有我安装的软件包都可以从root用户处找到。提前感谢您的帮助。
1个回答

4

2021年第二季度更新的答案

customize_conda.sh 脚本是自定义镜像中自定义 Conda 环境的推荐方法。

如果您需要更多功能,可以阅读代码并创建自己的脚本,但通常您需要使用绝对路径,例如 /opt/conda/anaconda/bin/conda/opt/conda/anaconda/bin/pip/opt/conda/miniconda3/bin/conda/opt/conda/miniconda3/bin/pip 来安装/卸载 Anaconda/Miniconda 环境的软件包。

原始回答(已过时)

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

在您的情况下,1.4 已经预装了 miniconda3。Init actions 和 jobs 以 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 

您可以安装包,例如:

conda install <package> -y

谢谢您的建议!我已经创建了这个图像,但是当我使用这个图像创建集群时,出现了错误,无法创建集群。错误信息是:初始化节点cluster-py-m失败:可选组件miniconda3初始化失败。这通常发生在Google集群启动脚本运行时:cmd='activate_component miniconda3'。 - Claudio
是的,我重现了这个问题。我认为你可能需要修改自定义镜像脚本中的miniconda激活脚本。在创建群集时应该激活Miniconda。我可以进行测试,并稍后回复。 - Dagang
似乎您需要安装conda以及其他包:conda install conda <other-packages> -y - Dagang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接