创建 Dataproc Metastore 服务后,您可以关联以下任一服务:
- Dataproc 集群。
- 自行管理的 Apache Hive 实例、Apache Spark 实例或 Presto 集群。
关联其中任一服务后,该服务会在执行查询期间使用您的 Dataproc Metastore 服务作为其 Hive Metastore。
准备工作
所需的角色
如需获得创建 Dataproc Metastore 和 Dataproc 集群所需的权限,请让您的管理员为您授予以下 IAM 角色:
-
如需授予对 Dataproc Metastore 资源的完全控制权,请执行以下任一操作:
-
用户账号或服务账号的 Dataproc Metastore 编辑器 (
roles/metastore.editor
) -
用户账号或服务账号的 Dataproc Metastore Admin (
roles/metastore.admin
)
-
用户账号或服务账号的 Dataproc Metastore 编辑器 (
-
如需创建 Dataproc 集群,请执行以下操作:
(
roles/dataproc.worker
) 在 Dataproc 虚拟机服务账号中 -
如需向 Hive 仓库目录授予读写权限,请执行以下操作:
(
roles/storage.objectAdmin
) 在 Dataproc 虚拟机服务账号中
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
这些预定义角色包含创建 Dataproc Metastore 和 Dataproc 集群所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
如需创建 Dataproc Metastore 和 Dataproc 集群,您需要具备以下权限:
-
如需创建 Dataproc Metastore,请执行以下操作:
metastore.services.create
在用户账号或服务账号中 -
如需创建 Dataproc 集群,请执行以下操作:
dataproc.clusters.create
在用户账号或服务账号中 -
如需访问 Hive 仓库目录,请执行以下操作:
orgpolicy.policy.get1
,resourcemanager.projects.get
,resourcemanager.projects.list
,storage.objects.*
,storage.multipartUploads.*
Dataproc 集群
Dataproc 是一项托管式 Apache Spark 和 Apache Hadoop 服务,借助该服务,您可以充分利用开源数据工具来执行批处理、查询、流式传输和机器学习。
注意事项
在创建并附加 Dataproc 集群之前,请检查您的 Dataproc Metastore 服务使用的端点协议。此协议定义了 Hive Metastore 客户端如何访问存储在 Dataproc Metastore 中的元数据。此选择还会影响您可以与服务集成和使用的功能。
Apache Thrift
如果您使用 Apache Thrift 端点协议,请考虑以下网络要求:
gRPC
如果您使用 gRPC 端点协议,请考虑以下网络要求:
使用 gRPC 端点协议创建 Dataproc Metastore 后,您必须授予其他 IAM 角色。
如果您使用的是 Dataproc 个人集群身份验证,则您的 Dataproc Metastore 必须使用 gRPC 端点协议。
如果您的 Dataproc 集群属于与 Dataproc Metastore 服务不同的项目,则必须先设置额外权限,然后才能创建 Dataproc 集群。
创建集群并关联 Dataproc Metastore
以下说明介绍了如何创建 Dataproc 集群,以及如何通过 Dataproc Metastore 服务连接到该集群。以下说明假定您已创建 Dataproc Metastore 服务。
- 在创建 Dataproc 集群之前,请确保您选择的 Dataproc 映像与您在创建 Dataproc Metastore 时选择的 Hive Metastore 版本兼容。如需了解详情,请参阅 Dataproc 映像版本列表。
为优化网络连接,请在 Dataproc Metastore 服务所在的区域中创建 Dataproc 集群。
控制台
在 Google Cloud 控制台中,打开 Dataproc 创建集群页面:
在集群名称字段中,为集群输入名称。
对于区域和可用区菜单,请选择您创建 Dataproc Metastore 服务时所在的区域。您可以选择任何可用区。
点击自定义集群标签页。
在网络配置部分中,选择创建 Dataproc Metastore 服务时所用的网络。
在 Dataproc Metastore 部分中,选择要附加的 Dataproc Metastore 服务。如果您尚未创建服务,则可以选择创建新服务。
可选:如果您的 Dataproc Metastore 服务使用 gRPC 端点协议,请执行以下操作:
- 点击管理安全性标签页。
- 在项目访问权限部分,选择为此集群启用 cloud-platform 范围。
根据需要配置其余服务选项。
如需创建集群,请点击创建。
新集群会显示在“集群”列表中。在集群准备好投入使用之前,集群状态会被列为正在预配,当实例可以使用时,状态会变为正在运行。
gcloud CLI
如需创建集群并关联 Dataproc Metastore,请运行以下 gcloud dataproc clusters create
命令:
gcloud dataproc clusters create CLUSTER_NAME \ --dataproc-metastore=projects/PROJECT_ID/locations/LOCATION/services/SERVICE \ --region=LOCATION \ --scopes=SCOPES
替换以下内容:
CLUSTER_NAME
:新 Dataproc 集群的名称。PROJECT_ID
:您在其中创建 Dataproc Metastore 服务的项目的 ID。LOCATION
:与您创建 Dataproc Metastore 服务时所在的区域相同。SERVICE
:您要附加到集群的 Dataproc Metastore 服务的名称。SCOPES
:(可选)如果您的 Dataproc Metastore 服务使用 gRPC 端点协议,请使用cloud-platform
。
REST
按照 API 说明使用 API Explorer 创建集群。
使用 Dataproc 集群属性关联集群
您还可以使用 Dataproc 属性将 Dataproc 集群附加到 Dataproc Metastore。这些属性包括 Dataproc Metastore ENDPOINT_URI
和 WAREHOUSE_DIR
。
如果您的 Dataproc Metastore 服务使用 Private Service Connect,或者您希望将 Dataproc 集群附加到 Dataproc Metastore 服务的辅助版本,请按照以下说明操作。
您可以通过以下两种方式使用 ENDPOINT_URI
和 WAREHOUSE_DIR
属性关联 Dataproc 集群:
选项 1:在创建 Dataproc 集群时
创建 Dataproc 集群时,请将 properties 标志与以下 Hive 配置搭配使用。
gcloud dataproc clusters create CLUSTER_NAME \ --properties="hive:hive.metastore.uris=ENDPOINT_URI,hive:hive.metastore.warehouse.dir=WAREHOUSE_DIR/hive-warehouse"
替换以下内容:
CLUSTER_NAME
:新 Dataproc 集群的名称。ENDPOINT_URI
:Dataproc Metastore 服务的端点 URI。WAREHOUSE_DIR
:Hive 仓库目录的位置。
方法 2:更新 hive-site.xml
文件
您还可以通过直接修改集群的 hive-site.xml
文件来关联 Dataproc 集群。
- 使用 SSH 连接到
.*-m
集群。 打开
/etc/hive/conf/hive-site.xml
文件,然后修改以下代码行:<property> <name>hive.metastore.uris</name> <!-- Update this value. --> <value>ENDPOINT_URI</value> </property> <!-- Add this property entry. --> <property> <name>hive.metastore.warehouse.dir</name> <value>WAREHOUSE_DIR</value> </property>
替换以下内容:
重启 HiveServer2:
sudo systemctl restart hive-server2.service
自行管理的集群
自行管理的集群可以是 Apache Hive 实例、Apache Spark 实例或 Presto 集群。
关联自行管理的集群
在客户端配置文件中设置以下值:
hive.metastore.uris=ENDPOINT_URI
hive.metastore.warehouse.dir=WAREHOUSE_DIR
替换以下内容: