Выполнить bash-скрипт в кластере dataproc от композитора - PullRequest
1 голос
/ 08 мая 2019

Я хотел добавить файлы jar в кластер dataproc в определенном месте после создания кластера с помощью простого сценария оболочки.

Я хотел бы автоматизировать этот шаг для запуска из композитора после создания кластера dataproc, следующим шагом является выполнение сценария bash, который добавит файлы jar в кластер proc данных.

Можете ли вы предложить, какой оператор воздушного потока использовать для выполнения сценариев bash в кластере dataproc?

1 Ответ

3 голосов
/ 08 мая 2019

Для запуска простого сценария оболочки на главном узле проще всего было бы использовать задание pig sh Dataproc, например следующее:

gcloud dataproc jobs submit pig --cluster ${CLUSTER} --execute 'sh echo hello world'

или использовать pig fs для непосредственного копирования jarfile:

gcloud dataproc jobs submit pig --cluster ${CLUSTER} --execute 'fs -cp gs://foo/my_jarfile.jar file:///tmp/localjar.jar'

Эквивалентная настройка оператора воздушного потока для этих команд gcloud будет использовать DataProcPigOperator со строковым параметром query.

Если вам нужно разместить файлы jar на всех узлах, лучше просто использовать действие инициализации , чтобы скопировать файлы jar во время запуска кластера:

#!/bin/bash
# copy-jars.sh

gsutil cp gs://foo/my-jarfile.jar /tmp/localjar.jar

Если вам нужно динамически определить, какие jar-файлы копировать на все узлы, после того, как кластер уже развернут, вы можете воспользоваться подходом , описанным здесь , чтобы использовать действие инициализации, которое непрерывно просматривает некоторые каталоги hdfs для копирования jar-файлов.в локальный каталог, а затем всякий раз, когда вам нужен jar-файл, чтобы появиться на всех узлах, вы можете просто отправить работу pig fs для размещенияjarfile из GCS в HDFS в наблюдаемом каталоге.

Как правило, вы не хотите, чтобы что-то автоматически опрашивалось на самом GCS, потому что запросы списка GCS стоят денег, тогда как опрашивать HDFS вашего кластера Dataproc не нужно.

...