【问题标题】:Submit Presto job on dataproc在 dataproc 上提交 Presto 作业
【发布时间】: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


【解决方案1】:

如果您想要做的只是设置可选组件以与 Postgres 端点一起工作,编写一个可选组件来执行此操作非常简单。您只需添加目录文件并重新启动 presto。

https://gist.github.com/KoopaKing/8e653e0c8d095323904946045c5fa4c2

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

【讨论】:

  • 非常感谢您的建议。这条路真正为我解决了它/opt/presto-server/etc/catalog/${YOUR_CATALOG_NAME}.properties。感谢您花时间编写示例脚本。
猜你喜欢
  • 1970-01-01
  • 2020-02-10
  • 2020-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-04
  • 1970-01-01
相关资源
最近更新 更多