Можно ли запустить Cloud Dataflow с пользовательскими пакетами?

Можно ли предоставить воркеры Dataflow с пользовательскими пакетами? Я хотел бы раскошелиться на двоичный файл, упакованный в Debian, изнутри вычисления.

Изменить: чтобы было ясно, конфигурация пакета достаточно сложна, поэтому невозможно просто связать файлы в --filesToStage. Решение должно включать установку пакета Debian в какой-то момент.


person emchristiansen    schedule 22.01.2015    source источник


Ответы (1)


Это не то, что Dataflow явно поддерживает. Однако ниже приведены некоторые рекомендации о том, как этого можно добиться. Пожалуйста, имейте в виду, что в сервисе могут измениться вещи, которые могут сломать это в будущем.

Есть две отдельные проблемы:

  1. Получение пакета debian на рабочем месте.
  2. Установка дебиан пакета.

Для первой проблемы вы можете использовать --filesToStage и указать путь к вашему пакету debian. Это приведет к тому, что пакет будет загружен в GCS, а затем загружен в рабочий процесс при запуске. Если вы используете эту опцию, вы должны включить в значение --filesToStage все ваши jar-файлы, поскольку они не будут включены по умолчанию, если вы явно установите --filesToStage.

В java worker любые файлы, переданные в --filesToStage, будут доступны в следующих каталогах (или подкаталогах)

/var/opt/google/dataflow

or

/dataflow/packages

Вам нужно будет проверить оба места, чтобы гарантированно найти файл.

Мы не гарантируем, что эти каталоги не изменятся в будущем. Это просто местоположения, используемые сегодня.

Чтобы решить вторую проблему, вы можете переопределить StartBundle в вашем ДоФн. Отсюда вы можете перейти в командную строку и установить свой пакет debian, найдя его в /dataflow/packages.

Может быть несколько экземпляров вашего DoFn, работающих параллельно, поэтому у вас могут возникнуть проблемы с конкуренцией, если два процесса попытаются установить ваш пакет одновременно. Я не уверен, может ли система пакетов debian справиться с этим, или вам нужно это явно указать в своем коде.

Небольшой вариант этого подхода заключается в том, чтобы не использовать --filesToStage для распространения пакета среди ваших рабочих процессов, а вместо этого добавить код в ваш startBundle, чтобы получить его из какого-либо места.

person Jeremy Lewi    schedule 22.01.2015
comment
Спасибо! В какой среде живут рабочие? Есть ли образ, с которым я могу поиграть? Кроме того, есть ли способ гарантировать, что каждый экземпляр запускает не более одного работника одновременно? - person emchristiansen; 23.01.2015
comment
Невозможно гарантировать, что экземпляр одновременно запускает только одного рабочего. Я не уверен, что вы имеете в виду под окружающей средой. Каждый воркер работает внутри своего контейнера докеров. Если вы запустите свою работу с параметром --teardownPolicy=TEARDOWN_NEVER, ваши виртуальные машины продолжат работать после завершения вашей работы, так что вы сможете подключиться по ssh. Однако вы не увидите /dataflow, потому что этот каталог существует только внутри контейнера. - person Jeremy Lewi; 23.01.2015
comment
Привет из будущего! Где определен контейнер докеров и как он вызывается? Я полагаю, что смогу запустить его на своей локальной машине и посмотреть, что внутри. - person emchristiansen; 28.01.2016
comment
Контейнер Docker является частью службы Dataflow. Запуск его на вашем локальном компьютере не является чем-то, что мы поддерживаем или поощряем. Если вы действительно хотите проверить контейнер, последний контейнер доступен в нашем реестре контейнеров Google dataflow.gcr.io/v1beta3/java-batch:20160118-rc01. Если у вас возникли проблемы с установкой двоичного файла, мы могли бы помочь, если вы сообщите нам, с какой проблемой вы столкнулись. - person Jeremy Lewi; 29.01.2016