我想在 Dataproc 上运行 shell 脚本,它将使用参数执行我的 Pig 脚本。这些参数始终是动态的,由 shell 脚本计算。
目前,此脚本在 script-runner.jar 的帮助下在 AWS 上运行。我不确定如何将其移动到 Dataproc。是否有类似的东西可用于 Dataproc?
或者我将不得不更改我所有的脚本并在 pig sh
的帮助下计算 Pig 中的参数。或 pig fs
?
最佳答案
正如 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'
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 工作的整个生命周期。
关于apache-pig - 在 GCP Dataproc 上运行 Bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58376623/