Google Cloud Dataproc 无法使用初始化脚本创建新集群

Posted

技术标签:

【中文标题】Google Cloud Dataproc 无法使用初始化脚本创建新集群【英文标题】:Google cloud dataproc failing to create new cluster with initialization scripts 【发布时间】:2017-02-16 01:25:51 【问题描述】:

我正在使用以下命令来创建数据处理集群:

gcloud dataproc 集群创建 infometis-dev --initialization-actions “gs://dataproc-initialization-actions/jupyter/jupyter.sh,gs://dataproc-initialization-actions/cloud-sql-proxy/cloud-sql-proxy.sh,gs:// dataproc-initialization-actions/hue/hue.sh,gs://dataproc-initialization-actions/ipython-notebook/ipython.sh,gs://dataproc-initialization-actions/tez/tez.sh,gs:// dataproc-initialization-actions/oozie/oozie.sh,gs://dataproc-initialization-actions/zeppelin/zeppelin.sh,gs://dataproc-initialization-actions/user-environment/user-environment.sh,gs: //dataproc-initialization-actions/list-consistency-cache/shared-list-consistency-cache.sh,gs://dataproc-initialization-actions/kafka/kafka.sh,gs://dataproc-initialization-actions/ ganglia/ganglia.sh,gs://dataproc-initialization-actions/flink/flink.sh” --image-version 1.1 --master-boot-disk-size 100GB --master-machine-type n1-standard-1 --metadata "hive-metastore-instance=g-test-1022:asia-east1:db_instance" --num-preemptible-workers 2 --num-workers 2 --preemptible-worker-boot-disk-size 1TB --properties hive:hive.metastore.warehouse.dir=gs://informetis-dev/hive-warehouse --worker-machine-type n1-standard-2 --zone asia-east1-b --bucket info-dev

但 Dataproc 未能创建集群,失败文件中出现以下错误:

猫 + mysql -u hive -phive-password -e '' ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (111) + mysql -e 'CREATE USER '\''hive'\'' IDENTIFIED BY '\''hive-password'\'';'错误 2003 (HY000): 无法连接到 MySQL 'localhost' (111) 上的服务器

有人知道这个失败的原因吗?

【问题讨论】:

请重新格式化无法阅读的答案 【参考方案1】:

您似乎缺少initialization action's documentation 中所述的--scopes sql-admin 标志,这将阻止 CloudSQL 代理授权其隧道进入您的 CloudSQL 实例。

此外,除了范围之外,您还需要确保 default Compute Engine service account 在拥有您的 CloudSQL 实例的任何项目中都具有正确的项目级权限。通常,默认服务帐户是 GCE 项目中的 project editor,因此当与 sql-admin 范围结合以访问同一项目中的 CloudSQL 实例时,这应该足够了,但如果您在单独的项目中访问 CloudSQL 实例项目,您还必须将该服务帐户添加为拥有 CloudSQL 实例的项目中的项目编辑器。

您可以在 IAM page 下找到您部署 Dataproc 集群的项目的默认计算服务帐户的电子邮件地址,名称为“Compute Engine 默认服务帐户”;它应该类似于 <number>@project.gserviceaccount.com`。

【讨论】:

【参考方案2】:

我假设您已经使用类似的东西创建了 Cloud SQL 实例,对吗?

gcloud sql instances create g-test-1022 \
  --tier db-n1-standard-1 \
  --activation-policy=ALWAYS

如果是这样,那么看起来错误在于元数据的参数是如何格式化的。你有这个:

--metadata "hive-metastore-instance=g-test-1022:asia-east1:db_instance”

不幸的是,该区域看起来不完整(asia-east1 而不是asia-east1-b)。

此外,在运行如此多的初始化操作时,您需要提供一个相当大的初始化操作超时时间,这样集群就不会在您的操作需要一段时间才能安装时假定某些事情已经失败。您可以通过指定:

--initialization-action-timeout 30m

这将允许集群为初始化操作提供 30 分钟的引导时间。

【讨论】:

【参考方案3】:

在您报告时,已检测到 cloud sql proxy initialization action 存在问题。很可能是这样的问题影响了你。

现在,这应该不是问题。

【讨论】:

以上是关于Google Cloud Dataproc 无法使用初始化脚本创建新集群的主要内容,如果未能解决你的问题,请参考以下文章

Google Cloud Dataflow 和 Google Cloud Dataproc 有啥区别?

Google Cloud Dataproc 删除 BigQuery 表不起作用

使用 google-cloud-python API 访问 Dataproc 时出现无效区域错误

来自 DataProc 集群的 Google Cloud Sdk

如何在 Google Cloud Platform 上查看 Dataproc 作业的输出文件

在 Google Cloud DataProc 上安排 cron 作业