在dataproc上提交Presto作业

时间:2019-08-27 09:50:31

标签: google-cloud-platform google-cloud-dataproc

我正在尝试使用Postgresql连接器在运行Presto的群集上提交dataproc作业。

集群初始化如下:

gcloud beta dataproc clusters create ${CLUSTER_NAME} \
    --project=${PROJECT} \
    --region=${REGION} \
    --zone=${ZONE} \
    --bucket=${BUCKET_NAME} \
    --num-workers=${WORKERS} \
    --scopes=cloud-platform \
    --initialization-actions=${INIT_ACTION}

${INIT_ACTION}指向一个bash文件,该文件具有用于使用postgresql启动presto集群的初始化动作。

不使用--optional-components=PRESTO,因为我需要--initialization-actions来执行非默认操作。并且同时拥有 --optional-component--initialization-actions都是无效的。

当我尝试执行简单的工作时:

gcloud beta dataproc jobs submit presto \
  --cluster ${CLUSTER_NAME} \
  --region ${REGION} \
      -e "SHOW TABLES"

我收到以下错误:

ERROR: (gcloud.beta.dataproc.jobs.submit.presto) FAILED_PRECONDITION: Cluster 
'<cluster-name>' requires optional component PRESTO to run PRESTO jobs

还有其他方法可以在集群上定义可选组件吗?

更新:

同时使用--optional-component--initialization-actions

gcloud beta dataproc clusters create ${CLUSTER_NAME} \
    ...
    --scopes=cloud-platform \
    --optional-components=PRESTO \
    --image-version=1.3 \
    --initialization-actions=${INIT_ACTION} \
    --metadata ...

从此repo复制${INIT_ACTION}。对函数configure_connectors进行一些修改,以创建一个postgresql连接器。

运行创建集群时,出现以下错误:

ERROR: (gcloud.beta.dataproc.clusters.create) Operation [projects/...] failed: Initialization action failed. Failed action 'gs://.../presto_config.sh', see output in: gs://.../dataproc-initialization-script-0_output.

错误输出记录为:

+ presto '--execute=select * from system.runtime.nodes;'
Error running command: java.net.ConnectException: Failed to connect to localhost/0:0:0:0:0:0:0:1:8080

这使我相信我必须重新编写初始化脚本。

很高兴知道当我指定--optional-components=PRESTO时正在运行哪个初始化脚本。

1 个答案:

答案 0 :(得分:2)

如果您要做的就是设置可选组件以与Postgres端点一起工作,那么编写一个可选组件就可以很容易地做到这一点。您只需要添加目录文件并重新启动presto。

https://github.com/KoopaKing/dataproc-presto-postgresql-connector-example/blob/master/example.sh

是一个示例初始化操作。我已经使用presto可选组件成功测试了它,但这非常简单。随意创建示例并将其暂存到GCS存储桶中。