Для запуска простого сценария оболочки на главном узле проще всего было бы использовать задание 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 не нужно.