Cloud Storage 连接器

借助 Cloud Storage 连接器开源 Java 库,您可以直接针对 Cloud Storage 中的数据运行 Apache HadoopApache Spark 作业。

Cloud Storage 连接器的优点

  • 直接数据访问:将数据存储到 Cloud Storage 中并直接访问。您无需先将其转移到 HDFS。
  • HDFS 兼容性:您可以使用 gs:// 前缀(而非 hdfs://)访问 Cloud Storage 中的数据。
  • 互操作性:通过在 Cloud Storage 中存储数据,可实现 Spark、Hadoop 和 Google 服务之间的无缝互操作性。
  • 数据可访问性:与 HDFS 不同,当您关闭 Hadoop 集群时,您仍然可以访问 Cloud Storage 中的数据。
  • 高数据可用性:存储在 Cloud Storage 中的数据具有高可用性并在全球范围内进行复制,同时性能不会出现损耗。
  • 无存储空间管理开销:与 HDFS 不同,Cloud Storage 不需要例行维护,例如检查文件系统、升级或回滚到以前版本的文件系统等。
  • 快速启动:在 HDFS 中,MapReduce 作业无法在 NameNode 退出安全模式之前启动;此退出安全模式可能需要几秒到数分钟时间,具体取决于数据的大小和状态。借助 Cloud Storage,只要任务节点启动,您就可以立即启动作业,随着时间推移,这样可以显著节省费用。

在 Dataproc 集群上设置连接器

默认情况下,Cloud Storage 连接器安装在 /usr/local/share/google/dataproc/lib/ 目录中的所有 Dataproc 集群节点上。以下子部分介绍了在 Dataproc 集群上完成连接器设置的步骤。

虚拟机服务账号

在 Dataproc 集群节点和其他 Compute Engine 虚拟机上运行连接器时,google.cloud.auth.service.account.enable 属性默认设置为 false,这意味着您无需为连接器配置 VM 服务账号凭据,因为 VM 元数据服务器会提供 VM 服务账号凭据。

Dataproc 虚拟机服务账号必须有权访问您的 Cloud Storage 存储桶。

用户选择的连接器版本

在 Dataproc 集群上安装的最新映像中使用的默认 Cloud Storage 连接器版本列在映像版本页面中。如果您的应用依赖于在集群上部署的非默认连接器版本,您可以执行以下操作之一来使用所选的连接器版本:

  • 使用 --metadata=GCS_CONNECTOR_VERSION=x.y.z 标志创建集群,该标志会将在集群上运行的应用使用的连接器更新为指定的连接器版本。
  • 将您所用版本的连接器类和连接器依赖项包含并重新定位到应用的 jar 中。重新定位是必要的,以避免您部署的连接器版本与 Dataproc 集群上安装的默认连接器版本之间发生冲突。另请参阅 Maven 依赖项重新定位示例

在非 Dataproc 集群上设置连接器

您可以按照以下步骤在非 Dataproc 集群(例如用于将本地 HDFS 数据移至 Cloud Storage 的 Apache Hadoop 或 Spark 集群)上设置 Cloud Storage 连接器。

  1. 下载连接器。

  2. 安装连接器。

    按照 GitHub 说明安装、配置和测试 Cloud Storage 连接器。

连接器使用情况

您可以通过以下方式使用该连接器访问 Cloud Storage 数据:

Java 用法

Cloud Storage 连接器需要 Java 8。

以下是 Cloud Storage 连接器的 Maven POM 依赖项管理部分示例。如需了解详情,请参阅依赖项管理

<dependency>
    <groupId>com.google.cloud.bigdataoss</groupId>
    <artifactId>gcs-connector</artifactId>
    <version>hadoopX-X.X.XCONNECTOR VERSION</version>
    <scope>provided</scope>
</dependency>

对于阴影版本:

<dependency>
    <groupId>com.google.cloud.bigdataoss</groupId>
    <artifactId>gcs-connector</artifactId>
    <version>hadoopX-X.X.XCONNECTOR VERSION</version>
    <scope>provided</scope>
    <classifier>shaded</classifier>
</dependency>

连接器支持

Google Cloud 支持将 Cloud Storage 连接器与 Google Cloud 产品和使用情形搭配使用。与 Dataproc 搭配使用时,该连接器的支持级别与 Dataproc 相同。如需了解详情,请参阅获取支持

使用 gRPC 连接到 Cloud Storage

默认情况下,Dataproc 上的 Cloud Storage 连接器使用 Cloud Storage JSON API。本部分介绍如何让 Cloud Storage 连接器使用 gRPC

使用注意事项

将 Cloud Storage 连接器与 gRPC 搭配使用时,需要注意以下事项:

  • 区域存储桶位置:只有当 Compute Engine 虚拟机和 Cloud Storage 存储桶位于同一 Compute Engine 区域时,gRPC 才能缩短读取延迟时间。
  • 读取密集型作业:gRPC 可以缩短长时间运行的读取的读取延迟时间,并有助于读取密集型工作负载。不建议将其用于创建 gRPC 通道、运行简短计算,然后关闭通道的应用。
  • 未经身份验证的请求:gRPC 不支持未经身份验证的请求。

使用要求

将 gRPC 与 Cloud Storage 连接器搭配使用时,需满足以下要求:

  • Dataproc 集群的 VPC 网络必须支持直接连接。这意味着,网络的路由防火墙规则必须允许出站流量到达 34.126.0.0/182001:4860:8040::/42

  • 创建 Dataproc 集群时,您必须将 Cloud Storage 连接器版本 2.2.23 或更高版本与映像版本 2.1.56+ 搭配使用,或者将 Cloud Storage 连接器版本 v3.0.0 或更高版本与映像版本 2.2.0 或更高版本搭配使用。每个 Dataproc 映像版本上安装的 Cloud Storage 连接器版本均在 Dataproc 映像版本页面中列出。

    • 如果您为 gRPC Cloud Storage 请求创建并使用 Dataproc on GKE 虚拟集群,建议使用 GKE 版本 1.28.5-gke.1199000 搭配 gke-metadata-server 0.4.285。此组合支持直接连接。
  • 您或贵组织的管理员必须授予 Identity and Access Management 角色,其中包含向 Cloud Storage 连接器设置和发出 gRPC 请求所需的权限。这些角色可能包括:

    • 用户角色:向用户授予的 Dataproc Editor 角色,以允许他们创建集群和提交作业
    • 服务账号角色:向 Dataproc 虚拟机服务账号授予的 Storage Object User 角色,以允许在集群虚拟机上运行的应用查看、读取、创建和写入 Cloud Storage 对象。

在 Cloud Storage 连接器上启用 gRPC

您可以在集群级别或作业级别在 Cloud Storage 连接器上启用 gRPC。在集群上启用该功能后,Cloud Storage 连接器读取请求将使用 gRPC。如果是在作业级别(而非集群级别)启用,Cloud Storage 连接器读取请求仅针对作业使用 gRPC。

启用集群

如需在集群级别在 Cloud Storage 连接器上启用 gRPC,请在创建 Dataproc 集群时设置 core:fs.gs.client.type=STORAGE_CLIENT 属性。在集群级别启用 gRPC 后,集群上运行的作业发出的 Cloud Storage 连接器读取请求将使用 gRPC。

gcloud CLI 示例:

gcloud dataproc clusters create CLUSTER_NAME \
    --project=PROJECT_ID \
    --region=REGION \
    --properties=core:fs.gs.client.type=STORAGE_CLIENT

替换以下内容:

  • CLUSTER_NAME:为集群指定名称。
  • PROJECT_NAME:集群所在项目的项目 ID。项目 ID 列在 Google Cloud 控制台信息中心项目信息部分。
  • REGION:指定集群所在的 Compute Engine 区域

启用作业

如需为特定作业在 Cloud Storage Connector 上启用 gRPC,请在提交作业时添加 --properties=spark.hadoop.fs.gs.client.type=STORAGE_CLIENT

示例:在使用 gRPC 从 Cloud Storage 读取数据的现有集群上运行作业。

  1. 创建一个本地 /tmp/line-count.py PySpark 脚本,该脚本使用 gRPC 读取 Cloud Storage 文本文件并输出文件中的行数。

    cat <<EOF >"/tmp/line-count.py"
    #!/usr/bin/python
    import sys
    from pyspark.sql import SparkSession
    path = sys.argv[1]
    spark = SparkSession.builder.getOrCreate()
    rdd = spark.read.text(path)
    lines_counter = rdd.count()
    print("There are {} lines in file: {}".format(lines_counter,path))
    EOF
    
  2. 创建本地 /tmp/line-count-sample.txt 文本文件。

    cat <<EOF >"/tmp/line-count-sample.txt"
    Line 1
    Line 2
    line 3
    EOF
    
  3. 将本地 /tmp/line-count.py/tmp/line-count-sample.txt 上传到 Cloud Storage 中的存储桶。

    gcloud storage cp /tmp/line-count* gs://BUCKET
    
  4. 在集群上运行 line-count.py 作业。设置 --properties=spark.hadoop.fs.gs.client.type=STORAGE_CLIENT 以为 Cloud Storage 连接器读取请求启用 gRPC。

    gcloud dataproc jobs submit pyspark gs://BUCKET/line-count.py \
    --cluster=CLUSTER_NAME \
    --project=PROJECT_ID  \
    --region=REGION \
    --properties=spark.hadoop.fs.gs.client.type=STORAGE_CLIENT \
    -- gs://BUCKET/line-count-sample.txt
    

    替换以下内容:

    • CLUSTER_NAME:现有集群的名称。
    • PROJECT_NAME:您的项目 ID。项目 ID 列在 Google Cloud 控制台信息中心项目信息部分中。
    • REGION:集群所在的 Compute Engine 区域。
    • BUCKET:您的 Cloud Storage 存储桶。

生成 gRPC 客户端指标

您可以配置 Cloud Storage 连接器,以便在 Cloud Monitoring 中生成 gRPC 相关指标。gRPC 相关指标可帮助您执行以下操作:

  • 监控和优化 Cloud Storage 的 gRPC 请求性能
  • 排查和调试问题
  • 深入了解应用使用情况和行为

如需了解如何配置 Cloud Storage 连接器以生成与 gRPC 相关的指标,请参阅使用 gRPC 客户端指标

资源