【问题标题】:Execute bash script on a dataproc cluster from a composer从作曲家在数据处理集群上执行 bash 脚本
【发布时间】:2019-05-08 05:45:22
【问题描述】:
使用简单的 shell 脚本创建集群后,我想将 jars 添加到特定位置的 dataproc 集群。
一旦创建了 dataproc 集群,我想自动执行此步骤以从 composer 运行,下一步是执行 bash 脚本,该脚本会将 jars 添加到 dataproc 集群中。
您能否建议使用哪个气流运算符在 dataproc 集群上执行 bash 脚本?
【问题讨论】:
标签:
google-cloud-dataproc
google-cloud-composer
【解决方案1】:
要在主节点上运行简单的 shell 脚本,最简单的方法是使用 pig sh Dataproc 作业,如下所示:
gcloud dataproc jobs submit pig --cluster ${CLUSTER} --execute 'sh echo hello world'
或者直接使用pig fs复制jarfile:
gcloud dataproc jobs submit pig --cluster ${CLUSTER} --execute 'fs -cp gs://foo/my_jarfile.jar file:///tmp/localjar.jar'
这些 gcloud 命令的等效 Airflow 运算符设置将使用 DataProcPigOperator 和 query 字符串参数。
如果您需要在所有节点上放置 jarfile,最好只使用initialization action 在集群启动时复制 jarfile:
#!/bin/bash
# copy-jars.sh
gsutil cp gs://foo/my-jarfile.jar /tmp/localjar.jar
如果您需要在集群部署后的某个时间动态确定将哪些 jarfile 复制到所有节点上,您可以使用 approach described here 使用初始化操作,该操作会持续监视一些 hdfs 目录以将 jarfile 复制到本地目录,然后当你需要一个 jarfile 出现在那里的所有节点上时,你可以提交一个 pig fs 作业,将 jarfile 从 GCS 放入 HDFS 的监视目录中。
一般来说,您不希望在 GCS 本身上自动轮询某些东西,因为 GCS 列表请求需要花钱,而轮询 Dataproc 集群的 HDFS 不需要额外费用。