我想在dataproc上运行shell脚本,它将使用参数执行我的pig脚本。这些参数始终是动态的,由shell脚本计算。目前,这些脚本是在script-runner.jar的帮助下在aws上运行的。我不知道如何将此移到dataproc。dataproc有类似的产品吗?否则我将不得不改变我所有的脚本,并在pig的帮助下计算参数 pig sh 或者 pig fs ?
pig sh
pig fs
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"
bqjvbblv2#
正如安妮特所说, pig sh 它本身被认为是dataproc作业的脚本运行程序;不用将 Package 器脚本本身转换为pig脚本,只需使用pig来引导任何要运行的bash脚本。例如,假设您有一个任意的bash脚本 hello.sh :
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 参数:
file:///
sh
--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的一生中。
/tmp/59bc732cd0b542b5b9dcc63f112aeca3
2条答案
按热度按时间pinkon5k1#
目前dataproc中没有shell作业。另一种方法是,可以使用useapig job with sh命令来派生shell脚本,然后(再次)运行pig作业(如果您喜欢python,也可以类似地使用pyspark)。例如-
bqjvbblv2#
正如安妮特所说,
pig sh
它本身被认为是dataproc作业的脚本运行程序;不用将 Package 器脚本本身转换为pig脚本,只需使用pig来引导任何要运行的bash脚本。例如,假设您有一个任意的bash脚本hello.sh
:这个
pig fs
命令使用hadoop路径,所以要将脚本从gcs复制到指定的目标file:///
确保它位于本地文件系统而不是hdfs上;然后sh
之后的命令将自动引用本地文件系统,这样您就不会使用file:///
在那里。或者,你可以利用这种方式
--jars
自动将文件暂存到为pig作业创建的临时目录中,而不是显式地从gcs复制到本地目录;只需将shell脚本本身指定为--jars
参数:或:
在这些情况下,脚本只能临时下载到如下目录中
/tmp/59bc732cd0b542b5b9dcc63f112aeca3
它只存在于Pig的一生中。