【问题标题】:GCP Dataproc custom image Python environmentGCP Dataproc 自定义图像 Python 环境
【发布时间】: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 用户中找到。 提前致谢

【问题讨论】:

    标签: python google-cloud-platform pyspark google-cloud-dataproc


    【解决方案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 &lt;other-packages&gt; -y
    猜你喜欢
    • 1970-01-01
    • 2021-12-01
    • 2019-01-25
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 2021-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多