借助 Cloud Storage 连接器开源 Java 库,您可以直接对 Cloud Storage 中的数据运行 Apache Hadoop 或 Apache 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
,这意味着您无需为连接器配置虚拟机服务账号凭据,因为虚拟机服务账号凭据由虚拟机元数据服务器提供。
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 连接器。
下载连接器。
- 如需下载 Cloud Storage 连接器,请执行以下操作:
- 如需使用位于 Cloud Storage 存储桶中的
latest
版本(不建议在生产应用中使用latest
版本),请使用以下连接器: - 如需使用 Cloud Storage 存储桶中的特定版本,可替换
gcs-connector-HADOOP_VERSION-CONNECTOR_VERSION.jar
名称模式中的 Hadoop 和 Cloud Storage 连接器版本,例如gs://hadoop-lib/gcs/gcs-connector-hadoop2-2.1.1.jar
。 - 如需使用 Apache Maven 仓库中的特定版本,请下载名称中包含
-shaded
后缀的阴影 jar 文件。
- 如需使用位于 Cloud Storage 存储桶中的
- 如需下载 Cloud Storage 连接器,请执行以下操作:
安装连接器。
请按照 GitHub 说明安装、配置和测试 Cloud Storage 连接器。
连接器用法
您可以使用连接器通过以下方式访问 Cloud Storage 数据:
- 在具有
gs://
前缀的 Spark、PySpark 或 Hadoop 应用中 - 在具有
hadoop fs -ls gs://bucket/dir/file
的 Hadoop shell 中 - 在 Google Cloud 控制台的 Cloud Storage 浏览器中
- 使用 Google Cloud SDK 命令,例如:
*
gcloud storage cp
*gcloud storage rsync
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 支持 Google Cloud 连接器用于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/18
和2001:4860:8040::/42
。- 如果 Dataproc 集群使用 IPv6 网络,则必须为虚拟机实例设置 IPv6 子网。如需了解详情,请参阅为实例和实例模板配置 IPv6。
创建 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
。此组合支持直接连接。
- 如果您为 gRPC Cloud Storage 请求创建并使用 Dataproc on GKE 虚拟集群,建议结合使用 GKE 版本
您或您的组织管理员必须授予 Identity and Access Management 角色,这些角色可提供设置 Cloud Storage 连接器并向其发出 gRPC 请求所需的权限。这些角色可能包括:
- 用户角色:向用户授予以允许他们创建集群和提交作业的 Dataproc Editor 角色
- 服务账号角色:向 Dataproc 虚拟机服务账号授予以允许在集群虚拟机上运行的应用查看、读取、创建和写入 Cloud Storage 对象的 Storage Object User 角色。
在 Cloud Storage 连接器上启用 gRPC
您可以在集群级层或作业级层为 Cloud Storage 连接器启用 gRPC。在集群上启用 gRPC 后,Cloud Storage 连接器读取请求会使用 gRPC。如果在作业上(而不是在集群级层)启用 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 连接器上启用 gRPC,请在提交作业时添加 --properties=spark.hadoop.fs.gs.client.type=STORAGE_CLIENT
。
示例:在使用 gRPC 从 Cloud Storage 读取数据的现有集群上运行作业。
创建一个本地
/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
创建本地
/tmp/line-count-sample.txt
文本文件。cat <<EOF >"/tmp/line-count-sample.txt" Line 1 Line 2 line 3 EOF
将本地
/tmp/line-count.py
和/tmp/line-count-sample.txt
上传到 Cloud Storage 中的存储桶。gcloud storage cp /tmp/line-count* gs://BUCKET
在集群上运行
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 客户端指标。
资源
- 请参阅 GitHub Cloud Storage 连接器配置属性。
- 请参阅使用 gRPC 连接到 Cloud Storage,以将 Cloud Storage 连接器用于客户端库、VPC Service Controls 和其他场景。
- 详细了解 Cloud Storage。
- 请参阅将 Cloud Storage 连接器与 Apache Spark 搭配使用。
- 了解 Apache Hadoop 文件系统。
- 查看 Javadoc 参考文档。