GCP Composer - как запустить Python 3 вместо Python 2

Я использую GCP Composer для оркестровки ETL…

Когда я создал экземпляр, я установил версию Python на Python 3

Одна из задач с использованием DataFlowPythonOperator, которая отлично работает, если запускается из нашего локального экземпляра dev-docker (Airflow v1.10.1 + Python 3.6.9)

он использует Apache Beam Python 3.6 SDK 2.16.0, если я запускаю его из образа Docker, который запускает Airflow v1.10.1

Всякий раз, когда мы выполняем развертывание на composer-1.7.9-airflow-1.10.1, задача выполняется с Python 2.7

Он также всегда запускает задание Dataflow с помощью SDK Google Cloud Dataflow для Python 2.5.0, если оно инициировано из Composer.

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'

person Soliman    schedule 16.12.2019    source источник


Ответы (2)


Версия Python вашей среды Composer не связана с версией Python, с которой будут выполняться задания Dataflow.

В настоящее время DataflowPythonOperator жестко кодирует версию Python на 2. Существует Pull-Request. отправлено, что исправляет это, но еще не выпущено. Вы можете дождаться выпуска версии Airflow с примененным исправлением или выполнить обратный перенос, как очень подробно описано во второй части этот ответ.

Также обратите внимание, что вы должны включить Apache Beam SDK в пакеты Python вашей среды Composer. Поскольку 2.16.0 - первая версия, которая официально поддерживает Python 3, я бы предложил указать apache-beam ==2.16.0 в списке пакетов.

Что касается того, почему вы можете запускать задания в Python 3 в вашей локальной настройке Airflow, я подозреваю, что команда python там по умолчанию использует Python 3.

person itroulli    schedule 16.12.2019
comment
В этом случае мне нужно будет установить apache-beam внутри среды композитора, что я не ищу ... При использовании доступного DataFlowPythonOperator он выполняет задание с python2.7, который работает с простыми задачами. но когда у нас есть более сложные преобразования, он ломается ... - person Soliman; 26.12.2019
comment
Вы пробовали обходной путь на связанный ответ? Нет необходимости явно устанавливать apache-beam внутри Composer, чтобы он работал. - person Daniel Duato; 15.01.2020

Я выполнил несколько шагов, которые решили эту проблему:

  1. Обновите свой экземпляр Composer до более поздней версии. Я перешел на composer-1.8.3-airflow-1.10.2 (пока пишу ответ)
  2. Вам нужно будет переопределить DataFlowPythonOperator и DataFlowHook (вы можете следовать this answer) или воспользуйтесь этим репозиторий gist.
  3. Запустите свой даг, он должен создать задание Dataflow с использованием Python3

Удачного кодирования ...

person Soliman    schedule 04.02.2020