GCP Dataproc 自定义图像 Python 环境
Posted
技术标签:
【中文标题】GCP Dataproc 自定义图像 Python 环境【英文标题】:GCP Dataproc custom image Python environment 【发布时间】:2019-11-22 07:27:26 【问题描述】:我在创建 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 用户中找到。 提前致谢
【问题讨论】:
【参考方案1】:更新答案(2021 年第二季度)
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 环境安装/卸载软件包。
原答案
我建议您先阅读Configure the cluster's Python environment,它概述了 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
然后你可以安装包,例如:
conda install <package> -y
【讨论】:
感谢您的建议!我制作了图像,但是当我使用此图像创建集群时出现错误,无法创建 anche 集群。错误是:Failed to initialize node cluster-py-m: Optional component miniconda3 failed to initialize。当 Google 集群启动脚本运行时会发生这种情况:cmd='activate_component miniconda3' 是的,我重现了这个问题。我认为您可能需要在自定义图像脚本中修改 miniconda 激活脚本。 Miniconda 应该在集群创建期间被激活。我可以做个测试,稍后再回复。 看来你必须安装conda
除了其他包:conda install conda <other-packages> -y
。以上是关于GCP Dataproc 自定义图像 Python 环境的主要内容,如果未能解决你的问题,请参考以下文章
带有presto的GCP dataproc - 有没有办法使用pyhive通过python远程运行查询?
GCP Dataproc 节点中没有资源来启动新的 SparkSession
如何在自动扩缩 GCP Dataproc 时了解初级工作者?