设置多区域 Dataproc Metastore 服务

本页面介绍如何设置多区域 Dataproc Metastore 服务。如需详细了解多区域 Dataproc Metastore 服务的工作原理,请参阅 Dataproc Metastore 区域

准备工作

所需的角色

如需获取创建多区域 Dataproc Metastore 服务所需的权限,请让管理员根据最小权限原则向您授予项目的以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理访问权限

此预定义角色包含创建多区域 Dataproc Metastore 服务所需的 metastore.services.create 权限。

您也可以使用自定义角色或其他预定义角色来获取此权限。

如需详细了解特定的 Dataproc Metastore 角色和权限,请参阅使用 IAM 管理访问权限

多区域 Dataproc Metastore 服务简介

多区域 Dataproc Metastore 服务将您的数据存储在两个不同区域中,并使用这两个区域运行工作负载。例如,多区域 nam7 包含 us-central1us-east4 区域。

  • 多区域 Dataproc Metastore 服务可跨两个区域复制元数据,并公开相关端点以访问 Hive Metastore。对于 gRPC,每个区域会公开一个端点。对于 Thrift,每个子网会公开一个端点。

  • 多区域 Dataproc Metastore 服务提供主动-主动高可用性 (HA) 集群配置。这种配置意味着工作负载在运行作业时可以访问任一区域。 它还为服务提供了故障切换机制。例如,如果主要区域端点发生故障,您的工作负载会自动路由到次要区域。这有助于防止 Dataproc 作业中断。

注意事项

以下注意事项适用于多区域 Dataproc Metastore 服务。

创建多区域 Dataproc Metastore 服务

选择以下任一标签页,了解如何使用 Thrift 或 gRPC 端点协议和 Dataproc Metastore 服务 2 来创建多区域服务。

gRPC

创建使用 gRPC 端点协议的多区域服务时,您无需进行任何特定网络设置。gRPC 协议会为您处理网络路由。

控制台

  1. 在 Google Cloud 控制台中,转到 Dataproc Metastore 页面。

    转到 Dataproc Metastore

  2. 点击导航栏中的 +创建

    此时会打开 Create Metastore service 对话框。

  3. 选择 Dataproc Metastore 2

  4. 价格和容量部分,选择企业 Plus 版 - 双区域

  5. 对于端点协议,选择 gRPC*。

  6. 如需创建并启动服务,请点击提交

    新的 Metastore 服务会显示在 Dataproc Metastore 页面上。状态显示为正在创建,直到服务可供使用。准备就绪后,状态将更改为有效。 预配服务可能需要几分钟时间。

gcloud CLI

如需创建 Dataproc Metastore 多区域服务,请运行以下 gcloud metastore services create 命令。此命令会创建 Dataproc Metastore 版本 3.1.2。

gcloud metastore services create SERVICE \
  --location=MULTI_REGION \
{ --instance-size=INSTANCE_SIZE | --scaling-factor=SCALING_FACTOR } \
  --endpoint-protocol=grpc

替换以下内容:

  • SERVICE:您的 Dataproc Metastore 服务的名称。
  • MULTI_REGION:要在其中创建 Dataproc Metastore 服务的多区域
  • INSTANCE_SIZE:多区域 Dataproc Metastore 的实例大小。例如 smallmediumlarge。如果您为 INSTANCE_SIZE 指定了值,请不要为 SCALING_FACTOR 指定值,
  • SCALING_FACTOR:Dataproc Metastore 服务的扩缩系数。例如 0.1。 如果您为 SCALING_FACTOR 指定了值,请不要为 INSTANCE_SIZE 指定值,

旧货

在创建使用 Thrift 端点协议的多区域服务时,您必须设置适当的子网设置。在这种情况下,对于您使用的每个 VPC 网络,您必须提供每个区域中的至少一个子网。

例如,如需创建 nam7 多区域,您必须同时提供 us-central1us-east4 区域。

控制台

  1. 在 Google Cloud 控制台中,转到 Dataproc Metastore 页面。

    转到 Dataproc Metastore

  2. 点击导航栏中的 +创建

    此时会打开 Create Metastore service 对话框。

  3. 选择 Dataproc Metastore 2

  4. 价格和容量部分,选择企业 Plus 版 - 双区域

    如需了解详情,请参阅定价方案和伸缩配置

  5. 服务名称字段中,为您的服务输入一个唯一的名称。

    如需了解命名惯例,请参阅资源命名惯例

  6. 对于端点协议,选择 Thrift

  7. 对于网络配置,请提供构成所选多区域配置的子网。

  8. 对于其余服务配置选项,请使用提供的默认值。

  9. 如需创建并启动服务,请点击提交

    新的 Metastore 服务会显示在 Dataproc Metastore 页面上。状态显示为正在创建,直到服务可供使用。准备就绪后,状态将更改为有效。 预配服务可能需要几分钟时间。

gcloud CLI

如需创建 Dataproc Metastore 多区域服务,请运行以下 gcloud metastore services create 命令。此命令会创建 Dataproc Metastore 版本 3.1.2。

gcloud metastore services create SERVICE \
  --location=MULTI_REGION \
  --consumer-subnetworks="projects/PROJECT_ID/regions/LOCATION1/subnetworks/SUBNET1,projects/PROJECT_ID/regions/LOCATION2/subnetworks/SUBNET2" \
{ --instance-size=INSTANCE_SIZE | --scaling-factor=SCALING_FACTOR } \
  --endpoint-protocol=thrift

或者,您可以将网络设置存储在一个文件中,如以下命令所示。

gcloud metastore services create SERVICE \
  --location=MULTI_REGION \
  --network-config-from-file=NETWORK_CONFIG_FROM_FILE
{ --instance-size=INSTANCE_SIZE | --scaling-factor=SCALING_FACTOR } \
  --endpoint-protocol=thrift

替换以下内容:

  • SERVICE:您的 Dataproc Metastore 服务的名称。
  • MULTI_REGION:要在其中创建 Dataproc Metastore 服务的多区域。
  • PROJECT_ID:您要在其中创建 Dataproc Metastore 服务的 Google Cloud 项目的 ID。
  • SUBNET1SUBNET2:构成多区域配置的子网列表。您可以使用子网的 ID、完全限定网址或相对名称。您最多可以指定 6 个子网。
  • LOCATION1LOCATION2:构成多区域配置的位置列表。您可以使用营业地点的 ID。例如,对于 nam7 多区域,请使用 us-central1us-east4
  • NETWORK_CONFIG_FROM_FILE:包含您的网络配置的 YAML 文件的路径。
  • INSTANCE_SIZE:多区域 Dataproc Metastore 的实例大小。例如 smallmediumlarge。如果您为 INSTANCE_SIZE 指定了值,请不要为 SCALING_FACTOR 指定值,
  • SCALING_FACTOR:Dataproc Metastore 服务的扩缩系数。例如 0.1。 如果您为 SCALING_FACTOR 指定了值,请不要为 INSTANCE_SIZE 指定值,

REST

如需了解如何创建多区域 Dataproc Metastore 服务,请按照说明使用 Google APIs Explorer 创建服务

如需配置多区域服务,请在 Network Config 对象中提供以下信息。

  "network_config": {
    "consumers": [
        {"subnetwork": "projects/PROJECT_ID/regions/LOCATION/subnetworks/SUBNET1"},
        {"subnetwork": "projects/PROJECT_ID/regions/LOCATION/subnetworks/SUBNET2"}
    ],
    "scaling_config": {
    "scaling_factor": SCALING_FACTOR
    }
  }

替换以下内容:

  • PROJECT_ID:您的 Dataproc Metastore 服务所属项目的 Google Cloud 项目 ID。
  • LOCATION:您的 Dataproc Metastore 服务所在的 Google Cloud 区域。
  • SUBNET1SUBNET2:构成多区域配置的子网列表。您可以使用子网的 ID、完全限定网址或相对名称。您最多可以指定五个子网。
  • SCALING_FACTOR:您要用于服务的扩缩系数

将 Dataproc Metastore 连接到 Dataproc 集群

选择以下标签页之一,了解如何从 Dataproc 集群连接多区域 Dataproc Metastore 服务。

gRPC

如需连接 Dataproc 集群,请选择与您使用的 Dataproc Metastore 版本对应的标签页。

Dataproc Metastore 3.1.2

  1. 为您的 Dataproc 集群创建以下变量:

    CLUSTER_NAME=CLUSTER_NAME
    PROJECT_ID=PROJECT_ID
    MULTI_REGION=MULTI_REGION
    DATAPROC_IMAGE_VERSION=DATAPROC_IMAGE_VERSION
    PROJECT=PROJECT
    SERVICE_ID=SERVICE_ID
    

    替换以下内容:

    • CLUSTER_NAME:您的 Dataproc 集群的名称。
    • PROJECT_ID:包含您的 Dataproc 集群的 Google Cloud 项目。请确保您使用的子网具有访问此项目的相应权限。
    • MULTI_REGION:要在其中创建 Dataproc 集群的 Google Cloud 多区域。
    • DATAPROC_IMAGE_VERSION:用于 Dataproc Metastore 服务的 Dataproc 映像版本。您必须使用 2.0 或更高版本的映像版本。
    • PROJECT:包含您的 Dataproc Metastore 服务的项目。
    • SERVICE_ID:您的 Dataproc Metastore 服务的服务 ID。
  2. 如需创建集群,请运行以下 gcloud dataproc clusters create 命令。--enable-kerberos 是可选项。只有在集群使用 kerberos 时,才应添加此选项。

    gcloud dataproc clusters create ${CLUSTER_NAME} \
     --project ${PROJECT_ID} \
     --region ${MULTI_REGION} \
     --image-version ${DATAPROC_IMAGE_VERSION} \
     --scopes "https://www.googleapis.com/auth/cloud-platform" \
     --dataproc-metastore projects/${PROJECT}/locations/${MULTI_REGION}/services/${SERVICE_ID} \
    [ --enable-kerberos ]

Dataproc Metastore 2.3.6

  1. 为您的 Dataproc Metastore 服务创建以下变量:

    METASTORE_PROJECT=METASTORE_PROJECT
    METASTORE_ID=METASTORE_ID
    MULTI_REGION=MULTI_REGION
    SUBNET=SUBNET

    替换以下内容:

    • METASTORE_PROJECT:包含您的 Dataproc Metastore 服务的 Google Cloud 项目。
    • METASTORE_ID:您的 Dataproc Metastore 服务的服务 ID。
    • MULTI_REGION:要用于 Dataproc Metastore 服务的多区域位置。
    • SUBNET:您用于 Dataproc Metastore 服务的子网之一。或者,用于您的服务的子网的父 VPC 网络中的任何子网。
  2. 为您的 Dataproc 集群创建以下变量:

    CLUSTER_NAME=CLUSTER_NAME
    DATAPROC_PROJECT=DATAPROC_PROJECT
    DATAPROC_REGION=DATAPROC_REGION
    HIVE_VERSION=HIVE_VERSION
    IMAGE_VERSION=r>IMAGE_VERSION
    

    替换以下内容:

    • CLUSTER_NAME:您的 Dataproc 集群的名称。
    • DATAPROC_PROJECT:包含您的 Dataproc 集群的 Google Cloud 项目。请确保您使用的子网具有访问此项目的相应权限。
    • DATAPROC_REGION:要在其中创建 Dataproc 集群的 Google Cloud 区域。
    • HIVE_VERSION:您的 Dataproc Metastore 服务使用的 Hive 版本。
    • IMAGE_VERSION:您用于 Dataproc Metastore 服务的 Dataproc 映像版本。
      • 对于 Hive Metastore 版本 2.0,请使用映像版本 1.5
      • 对于 Hive Metastore 版本 3.1.2,请使用映像版本 2.0
  3. 检索 Dataproc Metastore 服务的仓库目录,并将其存储在变量中。

    WAREHOUSE_DIR=$(gcloud metastore services describe "${METASTORE_ID}" --project "${METASTORE_PROJECT}" --location "${MULTI_REGION}" --format="get(hiveMetastoreConfig.configOverrides[hive.metastore.warehouse.dir])")
  4. 创建配置了多区域 Dataproc Metastore 的 Dataproc 集群。

    gcloud dataproc clusters create ${CLUSTER_NAME} \
        --project "${DATAPROC_PROJECT}" \
        --region ${DATAPROC_REGION} \
        --scopes "https://www.googleapis.com/auth/cloud-platform" \
        --subnet "${SUBNET}" \
        --optional-components=DOCKER \
        --image-version ${IMAGE_VERSION} \
        --metadata "hive-version=${HIVE_VERSION},dpms-name=${DPMS_NAME}" \
        --properties "hive:hive.metastore.uris=thrift://localhost:9083,hive:hive.metastore.warehouse.dir=${WAREHOUSE_DIR}" \
        --initialization-actions gs://metastore-init-actions/mr-metastore-grpc-proxy/metastore-grpc-proxy.sh

旧货

方法 1:修改 hive-site.xml 文件

  1. 找到 Dataproc Metastore 服务的端点 URI仓库目录。您可以选择任一公开的端点。
  2. 在 Google Cloud 控制台中,前往虚拟机实例页面。
  3. 在虚拟机实例列表中,点击 Dataproc 主节点 (.*-m) 所在行中的 SSH

    此时,系统会在节点的主目录中打开浏览器窗口。

  4. 打开 /etc/hive/conf/hive-site.xml 文件。

    sudo vim /etc/hive/conf/hive-site.xml
    

    您会看到类似于以下内容的输出:

    <property>
        <name>hive.metastore.uris</name>
        <value>ENDPOINT_URI</value>
    </property>
    <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>WAREHOUSE_DIR</value>
    </property>
    

    替换以下内容:

  5. 重启 HiveServer2:

    sudo systemctl restart hive-server2.service
    

方法 2:使用 gcloud CLI

运行以下 gcloud CLI gcloud dataproc clusters create 命令。

  1. 找到 Dataproc Metastore 服务的端点 URI仓库目录。您可以选择任一公开的端点。
gcloud dataproc clusters create CLUSTER_NAME \
    --network NETWORK \
    --project PROJECT_ID \
    --scopes "https://www.googleapis.com/auth/cloud-platform" \
    --image-version IMAGE_VERSION \
    --properties "hive:hive.metastore.uris=ENDPOINT,hive:hive.metastore.warehouse.dir=WAREHOUSE_DIR"

替换以下内容:

  • CLUSTER_NAME:您的 Dataproc 集群的名称。
  • NETWORK:包含您的 Dataproc 集群的 Google Cloud 项目。请确保您使用的子网具有访问此项目的相应权限。
  • PROJECT_ID:您的 Dataproc Metastore 服务使用的 Hive 版本。
  • IMAGE_VERSION:您用于 Dataproc Metastore 服务的 Dataproc 映像版本。
    • 对于 Hive Metastore 版本 2.0,请使用映像版本 1.5
    • 对于 Hive Metastore 版本 3.1.2,请使用映像版本 2.0
  • ENDPOINT:您的 Dataproc Metastore 使用的 Thrift 端点。
  • WAREHOUSE_DIR:Dataproc Metastore 的仓库目录。

后续步骤