在 GCP Dataproc 上运行 Bash 脚本

For*_*hah 4 apache-pig google-cloud-dataproc

我想在 Dataproc 上运行 shell 脚本,它将使用参数执行我的 Pig 脚本。这些参数始终是动态的,由 shell 脚本计算。

目前,此脚本在 script-runner.jar 的帮助下在 AWS 上运行。我不确定如何将其移动到 Dataproc。是否有类似的东西可用于 Dataproc?

或者我将不得不更改我所有的脚本并在pig sh或的帮助下计算 Pig 中的参数pig fs

小智 5

目前 Dataproc 中没有 shell 作业。作为替代方案,您可以使用 sh 命令使用 pig 作业,该命令会分叉您的 shell 脚本,然后该脚本可以(再次)运行您的 pig 作业。(如果您更喜欢 python,您可以类似地使用 pyspark)。例如-

# cat a.sh
HELLO=hello
pig -e "sh echo $HELLO"
# pig -e "sh $PWD/a.sh"
Run Code Online (Sandbox Code Playgroud)


Den*_*Huo 5

正如 Aniket 所提到的,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'
Run Code Online (Sandbox Code Playgroud)

pig fs命令使用 Hadoop 路径,因此要从 GCS 复制您的脚本,您必须复制到指定的目的地,file:///以确保它位于本地文件系统而不是 HDFS 上;然后之后的sh命令将自动引用本地文件系统,因此您不要file:///在那里使用。

或者,您可以利用工作方式--jars将文件自动暂存到仅为您的 Pig 作业创建的临时目录中,而不是从 GCS 显式复制到本地目录;您只需将 shell 脚本本身指定为--jars参数:

gcloud dataproc jobs submit pig --cluster ${CLUSTER} \
    --jars hello.sh \
    -e 'sh chmod 750 ${PWD}/hello.sh; sh ${PWD}/hello.sh'
Run Code Online (Sandbox Code Playgroud)

或者:

gcloud dataproc jobs submit pig --cluster ${CLUSTER} \
    --jars gs://${BUCKET}/hello.sh \
    -e 'sh chmod 750 ${PWD}/hello.sh; sh ${PWD}/hello.sh'
Run Code Online (Sandbox Code Playgroud)

在这些情况下,脚本只会临时下载到一个目录中,该目录/tmp/59bc732cd0b542b5b9dcc63f112aeca3仅在 Pig 作业的生命周期内存在。