在GCP Dataproc上运行Bash脚本

时间:2019-10-14 12:17:17

标签: apache-pig google-cloud-dataproc

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

当前,这些脚本在script-runner.jar的帮助下在AWS上运行。我不确定如何将其移至Dataproc。有什么类似的东西可用于Dataproc吗?

还是我将不得不更改所有脚本并借助pig shpig fs计算Pig中的参数?

2 个答案:

答案 0 :(得分:4)

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

npm install --save node@earlierversion
npm install rest of packages

答案 1 :(得分:4)

正如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显式复制到本地目录中;您只需将外壳脚本本身指定为--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作业的整个生命周期中。