Пользовательская версия Apache Beam Python в потоке данных

Мне интересно, возможно ли иметь в Google Dataflow собственную версию Apache Beam Python. Версия, которая недоступна в общедоступных репозиториях (на момент написания статьи: 0.6.0 и 2.0.0). Например, версия HEAD из официального репозитория Apache Beam или специальный тег по этому вопросу.

Мне известна возможность упаковки пользовательских пакетов (например, частных локальных), как описано в официальной документации. Здесь есть ответы на вопросы о том, как это сделать для некоторых других сценариев. И есть даже руководство GIST по этому вопросу.

Но мне не удалось получить текущую версию разработки Apache Beam (или версию с тегами), которая доступна в основной ветке его официального репозитория, чтобы она была упакована и отправлена ​​вместе с моим сценарием в Google Dataflow. Например, для последнего доступного тега, чья ссылка для обработки PiP будет: git+https://github.com/apache/beam.git@v2.1.0-RC2#egg=apache_beam[gcp]&subdirectory=sdks/python Я получаю что-то вроде этого:

INFO:root:Executing command: ['.../bin/python', '-m', 'pip', 'install', '--download', '/var/folders/nw/m_035l9d7f1dvdbd7rr271tcqkj80c/T/tmpJhCkp8', 'apache-beam==2.1.0', '--no-binary', ':all:', '--no-deps']
DEPRECATION: pip install --download has been deprecated and will be removed in the future. Pip now has a download command that should be used instead.
Collecting apache-beam==2.1.0
  Could not find a version that satisfies the requirement apache-beam==2.1.0 (from versions: 0.6.0, 2.0.0)
No matching distribution found for apache-beam==2.1.0

Есть идеи? (Мне интересно, возможно ли это, так как Google Dataflow, возможно, исправил версии Apache Beam, которые могут работать на официально выпущенных версиях).

1 ответ

Решение

Я отвечу сам, как я получил ответ на этот вопрос в одной JIRA Apache Beam, с которой я помогал.

Если вы хотите использовать пользовательскую версию Apache Beam Python в облачном потоке данных Google (то есть запустить конвейер с --runner DataflowRunner, вы должны использовать опцию --sdk_location <apache_beam_v1.2.3.tar.gz> когда вы запускаете свой трубопровод; где <apache_beam_v1.2.3.tar.gz> местоположение соответствующей упакованной версии, которую вы хотите использовать.

Например, на момент написания этой статьи, если вы проверили HEAD В версии git- репозитория Apache Beam вы должны сначала упаковать репозиторий, перейдя в Python SDK с помощью cd beam/sdks/python а потом беги python setup.py sdist (сжатый tar-файл будет создан в distподкаталог).

После этого вы можете запустить свой конвейер следующим образом:

python your_pipeline.py [...your_options...] --sdk_location beam/sdks/python/dist/apache-beam-2.2.0.dev0.tar.gz

Облачный поток данных Google будет использовать прилагаемый SDK.

Другие вопросы по тегам