运行 Bash GCP Dataproc 上的脚本
Run Bash script on GCP Dataproc
我想 运行 shell Dataproc 上的脚本,它将使用参数执行我的 Pig 脚本。这些参数始终是动态的,由 shell 脚本计算。
目前,在脚本-runner.jar 的帮助下,此脚本 运行正在 AWS 上运行。我不确定如何将其移至 Dataproc。是否有适用于 Dataproc 的类似产品?
或者我将不得不更改我的所有脚本并在 pig sh
或 pig 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 作业的生命周期内存在。
我想 运行 shell Dataproc 上的脚本,它将使用参数执行我的 Pig 脚本。这些参数始终是动态的,由 shell 脚本计算。
目前,在脚本-runner.jar 的帮助下,此脚本 运行正在 AWS 上运行。我不确定如何将其移至 Dataproc。是否有适用于 Dataproc 的类似产品?
或者我将不得不更改我的所有脚本并在 pig sh
或 pig fs
?
目前 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 作业的生命周期内存在。