Как упоминает Аникет, 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
и который существует только на протяжении всего срока службы свиньи.