【问题标题】:Creating a fully isolated python venv for pyspark为 pyspark 创建一个完全隔离的 python venv
【发布时间】:2022-10-17 23:43:41
【问题描述】:

我将 pyspark 应用程序部署在 yarn 集群上,python venv 安装在可从所有节点访问的挂载上。我遇到的问题是节点上的 python 安装不一致,其中一些节点安装了必需的模块(这是 python 构建的一部分)而其他节点没有,这导致频繁崩溃。我注意到当使用python -m venv 创建一个venv 时,它不会复制python 安装,而是为它创建一个symlink

事实证明,与负责集群的团队就此进行沟通很乏味,因此我想在挂载上创建一个完全隔离的 python 安装,作为这种情况和未来问题的解决方案。我没有找到任何使用venv 模块的方法。我想改为将项目环境迁移到 conda 环境,据我了解,它安装了单独的 python 安装。但是,理想情况下,我希望使用venv 来执行此操作,因为我不想在我的堆栈中引入另一种技术并进行迁移。但是,我想知道是否有其他简单/推荐的解决方案来解决这个问题。

谢谢。

【问题讨论】:

    标签: python apache-spark pyspark hadoop-yarn python-venv


    【解决方案1】:

    节点上的python安装不一致,有些节点安装了必需的模块,有些没有

    理想情况下,您不会使用 Spark 来解决该问题。使用 Ansible 或 Puppet 等工具跨服务器集群部署/管理状态,以及一致的 Python 安装版本。 IE。不要打包 Python 3.10 venv,然后尝试在只有 Python 3.6 的集群上运行...

    否则,PySpark documentation 将完全满足您的需求。

    使用venv-pack

    python -m venv pyspark_venv
    source pyspark_venv/bin/activate
    pip install pyarrow pandas venv-pack
    venv-pack -o pyspark_venv.tar.gz
    

    您可以通过利用--archives 选项或spark.archives 配置(YARN 中的spark.yarn.dist.archives)直接传递/解压归档文件并在执行程序上启用环境。

    对于spark-submit,您可以通过运行如下命令来使用它。另外,请注意 PYSPARK_DRIVER_PYTHON 必须在 Kubernetes 或 YARN 集群模式下取消设置。

    export PYSPARK_DRIVER_PYTHON=python # Do not set in cluster modes.
    export PYSPARK_PYTHON=./environment/bin/python
    spark-submit --archives pyspark_venv.tar.gz#environment app.py
    

    【讨论】:

    • 这不是 pip 包,它是 python 构建的一部分,我需要打包整个 python 安装。来自the docs:“Python 没有与环境打包,而是在环境中进行符号链接。这对于机器上已经安装了 Python,但可能没有所需的库依赖项的部署情况很有用。”
    猜你喜欢
    • 2017-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多