Запустите скрипт Bash на GCP Dataproc - PullRequest
3 голосов
/ 14 октября 2019

Я хочу запустить сценарий оболочки на Dataproc, который будет выполнять мои сценарии Pig с аргументами. Эти аргументы всегда являются динамическими и рассчитываются с помощью сценария оболочки.

В настоящее время эти скрипты работают на AWS с помощью script-runner.jar. Я не уверен, как перенести это в Dataproc. Есть ли что-нибудь подобное, что доступно для Dataproc?

Или мне придется изменить все мои скрипты и вычислить аргументы в Pig с помощью pig sh или pig fs?

Ответы [ 2 ]

4 голосов
/ 15 октября 2019

Как упоминает Аникет, pig sh сам по себе будет считаться обработчиком сценариев для заданий Dataproc;вместо того, чтобы превращать скрипт-обертку в скрипт Pig сам по себе, просто используйте Pig для начальной загрузки любого скрипта bash, который вы хотите запустить. Например, предположим, что у вас есть произвольный сценарий bash hello.sh:

gsutil cp hello.sh gs://${BUCKET}/hello.sh
gcloud dataproc jobs submit pig --cluster ${CLUSTER} \
    -e 'fs -cp -f gs://${BUCKET}/hello.sh file:///tmp/hello.sh; sh chmod 750 /tmp/hello.sh; sh /tmp/hello.sh'

Команда pig fs использует пути Hadoop, поэтому для копирования сценария из GCS необходимо скопировать его в место назначения, указанное как file:/// дляубедитесь, что он находится в локальной файловой системе вместо HDFS;тогда команды sh впоследствии будут автоматически ссылаться на локальную файловую систему, поэтому вы не будете использовать file:/// там.

В качестве альтернативы, вы можете воспользоваться тем, как --jars работает для автоматической вставки файла ввременный каталог, созданный только для вашей работы с Pig, а не копируемый из GCS в локальный каталог;вы просто указываете свой скрипт оболочки в качестве аргумента --jars:

gcloud dataproc jobs submit pig --cluster ${CLUSTER} \
    --jars hello.sh \
    -e 'sh chmod 750 ${PWD}/hello.sh; sh ${PWD}/hello.sh'

или:

gcloud dataproc jobs submit pig --cluster ${CLUSTER} \
    --jars gs://${BUCKET}/hello.sh \
    -e 'sh chmod 750 ${PWD}/hello.sh; sh ${PWD}/hello.sh'

В этих случаях скрипт будет только временно загружен в каталог, который выглядиткак /tmp/59bc732cd0b542b5b9dcc63f112aeca3 и который существует только на протяжении всего срока службы свиньи.

4 голосов
/ 15 октября 2019

В настоящее время в Dataproc нет работы с оболочкой. В качестве альтернативы вы можете использовать команду use pig с командой sh, которая разветвляет ваш сценарий оболочки, который может (снова) запустить ваше задание pig. (Вы можете использовать pyspark аналогично, если вы предпочитаете python). Например -

# cat a.sh
HELLO=hello
pig -e "sh echo $HELLO"
# pig -e "sh $PWD/a.sh"
...