运行 Bash GCP Dataproc 上的脚本

Run Bash script on GCP Dataproc

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

目前,在脚本-runner.jar 的帮助下,此脚本 运行正在 AWS 上运行。我不确定如何将其移至 Dataproc。是否有适用于 Dataproc 的类似产品?

或者我将不得不更改我的所有脚本并在 pig shpig fs?

的帮助下计算 Pig 中的参数

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

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

正如 Aniket 所提到的,pig sh 本身将被视为 Dataproc 作业的脚本-运行ner;不必将您的包装脚本本身变成 Pig 脚本,只需使用 Pig 来 bootstrap 任何您想要 运行 的 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 复制到本地目录;您只需将 shell 脚本本身指定为 --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 的目录中,并且该目录仅在 pig 作业的生命周期内存在。