Это не то, что Dataflow явно поддерживает. Однако ниже приведены некоторые рекомендации о том, как этого можно добиться. Пожалуйста, имейте в виду, что в сервисе могут измениться вещи, которые могут сломать это в будущем.
Есть две отдельные проблемы:
- Получение пакета debian на рабочем месте.
- Установка дебиан пакета.
Для первой проблемы вы можете использовать --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