【问题标题】:GCP Composer - how to run Python 3 instead of Python 2GCP Composer - 如何运行 Python 3 而不是 Python 2
【发布时间】:2020-04-08 19:09:15
【问题描述】:

我正在使用 GCP Composer 来编排 ETL……

创建实例时,我将 Python 版本设置为 Python 3

使用 DataFlowPythonOperator 的任务之一,如果从我们的本地 dev-docker 实例启动,它工作正常(Airflow v1.10.1 + Python 3.6.9)

如果我从运行 Airflow v1.10.1 的 Docker 映像运行它,它会使用 Apache Beam Python 3.6 SDK 2.16.0

每当我们部署到 composer-1.7.9-airflow-1.10.1 时,任务都会使用 Python 2.7...

如果从 Composer 启动,它还始终使用适用于 Python 2.5.0 的 Google Cloud Dataflow SDK 运行 Dataflow 作业

Composer 默认考虑 Python 2.7 版本,这会导致很多转换崩溃……

我找不到配置 Composer 以使用 Python 3.x 创建和运行 Dataflow 作业的方法……

命令:

$ gcloud composer environments describe etl --location us-central1

结果:

softwareConfig:
    imageVersion: composer-1.7.9-airflow-1.10.1
    pythonVersion: '3'

【问题讨论】:

    标签: google-cloud-platform google-cloud-dataflow airflow google-cloud-composer


    【解决方案1】:

    您的 Composer 环境的 Python 版本与执行 Dataflow 作业的 Python 版本无关。

    目前,DataflowPythonOperator 将 Python 版本硬编码为 2。提交的 Pull-Request 修复了 this,但尚未发布。您可以等待带有应用修复的 Airflow 版本的发布,或者您可以按照 this answer 第二部分中非常详细的描述将其向后移植。

    另外请注意,您必须将 Apache Beam SDK 包含到 Composer 环境的 Python 包中。由于 2.16.0 是第一个正式支持 Python 3 的版本,我建议在包列表中指定 apache-beam ==2.16.0

    至于为什么可以在本地 Airflow 设置中使用 Python 3 启动作业,我怀疑那里的 python 命令默认为 Python 3。

    【讨论】:

    • 在这种情况下,我需要在 composer 环境中安装 apache-beam,这不是我想要的......当使用可用的 DataFlowPythonOperator 时,它使用 python2.7 运行作业,它处理简单的任务。但是当我们有更复杂的转换时,它就会中断......
    • 您在linked answer 上尝试过解决方法吗?不需要在 Composer 中显式安装 apache-beam 以使其工作。
    【解决方案2】:

    我遵循了几个步骤解决了这个问题:

    1. 将您的 Composer 实例升级到更高版本。我升级到 composer-1.8.3-airflow-1.10.2(在我写答案的时候)
    2. 您需要覆盖 DataFlowPythonOperatorDataFlowHook(您可以关注this answer)或使用此gist repo
    3. 运行你的 dag,它应该使用 Python3 创建一个 Dataflow 作业

    编码愉快...

    【讨论】:

      猜你喜欢
      • 2019-06-15
      • 2015-11-01
      • 2018-10-18
      • 2019-10-04
      • 2017-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多