在gcp dataproc上运行bash脚本

3lxsmp7m  于 2021-06-24  发布在  Pig
关注(0)|答案(2)|浏览(416)

我想在dataproc上运行shell脚本,它将使用参数执行我的pig脚本。这些参数始终是动态的,由shell脚本计算。
目前,这些脚本是在script-runner.jar的帮助下在aws上运行的。我不知道如何将此移到dataproc。dataproc有类似的产品吗?
否则我将不得不改变我所有的脚本,并在pig的帮助下计算参数 pig sh 或者 pig fs ?

pinkon5k

pinkon5k1#

目前dataproc中没有shell作业。另一种方法是,可以使用useapig job with sh命令来派生shell脚本,然后(再次)运行pig作业(如果您喜欢python,也可以类似地使用pyspark)。例如-


# cat a.sh

HELLO=hello
pig -e "sh echo $HELLO"

# pig -e "sh $PWD/a.sh"
bqjvbblv

bqjvbblv2#

正如安妮特所说, pig sh 它本身被认为是dataproc作业的脚本运行程序;不用将 Package 器脚本本身转换为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的一生中。

相关问题