我想在Dataproc上运行shell脚本,它将使用参数执行我的Pig脚本。这些参数始终是动态的,由shell脚本计算。
当前,这些脚本在script-runner.jar的帮助下在AWS上运行。我不确定如何将其移至Dataproc。有什么类似的东西可用于Dataproc吗?
还是我将不得不更改所有脚本并借助pig sh
或pig fs
计算Pig中的参数?
答案 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作业的整个生命周期中。