当我创建DataProc自定义映像和Pyspark时遇到问题。 我的自定义映像基于DataProc 1.4.1-debian9,并使用初始化脚本从Requires.txt文件中安装python3和一些软件包,然后设置python3 env变量以强制pyspark使用python3。 但是,当我在使用此映像创建的集群(为简单起见,使用单节点标志)上提交作业时,该作业找不到安装的软件包。 如果我登录群集计算机并运行pyspark命令,则启动Anaconda PySpark,但是如果我以root用户身份登录并运行pyspark,则我的pyspark具有python 3.5.3。 这是很奇怪的。 我不知道是哪个用户用来创建图像? 为什么我的用户和root用户拥有不同的环境? 我希望映像是用root用户配置的,所以我希望可以从root用户找到我安装的所有软件包。 预先感谢
答案 0 :(得分:1)
通常,我建议您先阅读Configure the cluster's Python environment,其中概述了不同图像版本上Dataproc的Python环境,以及有关如何安装软件包以及为PySpark作业选择Python的说明。
在您的情况下,miniconda3已随附1.4。初始化操作和作业以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