【发布时间】:2019-12-31 11:27:44
【问题描述】:
我正在尝试在使用 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 来执行非默认操作。并且 both --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 ...
${INIT_ACTION} 是从此repo 复制而来。对函数 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 时,很高兴知道正在运行哪个初始化脚本。
【问题讨论】:
-
不幸的是,Dataproc 要求在为 Presto 作业类型创建集群时使用可选组件。您应该能够使用可选组件并在创建集群时指定初始化操作。您的 init 操作将在安装可选组件后运行,因此您仍然可以覆盖 Presto 组件的默认行为。如果您使用可选组件并指定初始化操作,您能否描述发生的错误?
-
> "您的 init 操作将在可选组件安装后运行,因此您仍然可以覆盖 Presto 组件的默认行为。"很高兴知道它们的执行顺序,谢谢。我会尝试你的建议,并在今天晚些时候更新问题。我会
-
@JerryDing 请看上面的更新
标签: google-cloud-platform google-cloud-dataproc