借助 Cloud Storage 连接器 开源 Java 库 ,您可以直接对 Cloud Storage 中的数据运行 Apache Hadoop 或 Apache Spark 作业。
Lightning Engine 可增强与 Cloud Storage 的连接,以优化其原生引擎的 性能。改进后的 Cloud Storage 连接器可最大限度地减少元数据操作,从而降低费用,而优化的文件输出提交器可为 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,只要任务节点启动,您就可以立即启动作业,随着时间推移,这样可以显著节省费用。
在 Managed Service for Apache Spark 集群上设置连接器
默认情况下,Cloud Storage 连接器安装在 /usr/local/share/google/managed-spark/lib/ 目录中的所有 Managed Service for Apache Spark 集群节点上。以下子部分介绍了您可以采用哪些步骤在 Managed Service for Apache Spark 集群上完成连接器设置。
虚拟机服务帐号
在 Managed Service for Apache Spark 集群
节点和其他 Compute Engine 虚拟机上运行连接器时,
google.cloud.auth.service.account.enable 属性默认设置为 false,这意味着您无需为连接器配置
虚拟机服务账号
凭证,因为虚拟机服务帐号凭证由
虚拟机元数据服务器提供。
Managed Service for Apache Spark 虚拟机服务账号 必须有权访问 Cloud Storage 存储桶。
如果您将自定义服务帐号与 2.2+ Spark 作业集群搭配使用:如果您
在创建 Managed Service for Apache Spark 2.2+ 映像版本集群(您向其提交 Spark 作业)时
选择了
自定义服务账号,并且您的 Spark 作业从 Cloud Storage 读取数据或向其中写入数据,
为了避免可能导致作业失败的权限问题,请将以下
配置(以粗体显示)添加到 Spark 会话创建代码中:
spark = SparkSession.builder \
.appName(appName) \
.config("fs.gs.auth.type", "SERVICE_ACCOUNT_JSON_KEYFILE") \
.config("fs.gs.auth.service.account.json.keyfile", "path/to/your/keyfile.json") \
.getOrCreate()
如需验证权限是否设置正确,请检查以确保自定义服务帐号具有 storage.objects.get 和 storage.objects.create 权限:
用户选择的连接器版本
Managed Service for Apache Spark 集群上安装的最新映像 中使用的默认 Cloud Storage 连接器版本列在 映像版本页面中。 如果您的应用取决于集群上部署的非默认连接器版本,您可以执行以下操作之一来使用所选的连接器版本:
- 使用
--metadata=GCS_CONNECTOR_VERSION=x.y.z标志创建集群,该标志会将集群上运行的应用使用的连接器更新为指定的连接器版本。 - 添加您所使用的版本的连接器类和连接器依赖项并 重定位 到应用的 jar 文件。重定位是必要的,以避免您部署的连接器版本与 Managed Service for Apache Spark 集群上安装的默认连接器版本之间发生冲突。另请参阅 Maven 依赖项重定位示例。
在非 Managed Service for Apache Spark 集群上设置连接器
您可以采用以下步骤在非 Managed Service for Apache Spark 集群(例如,您用于将本地 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 命令,例如:
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 与 Managed Service for Apache Spark 搭配使用时,它与 Managed Service for Apache Spark 的支持级别相同。如需了解详情, 请参阅获取支持。
使用 gRPC 连接到 Cloud Storage
默认情况下,Managed Service for Apache Spark 上的 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 连接器搭配使用时,需满足以下要求:
Managed Service for Apache Spark 集群 VPC 网络 必须 支持 直接连接。 这意味着,网络的 路由 和 防火墙规则 必须允许出站流量 到达
34.126.0.0/18和2001:4860:8040::/42。- 如果 Managed Service for Apache Spark 集群使用 IPv6 网络,则必须为虚拟机实例设置 IPv6 子网。如需了解详情, 请参阅为实例和实例模板配置 IPv6。
创建 Managed Service for Apache Spark 集群时, 您必须将 Cloud Storage 连接器版本
2.2.23或更高版本与映像版本2.1.56+搭配使用,或者将 Cloud Storage 连接器版本 v3.0.0 或更高版本与映像版本 2.2.0+ 搭配使用。 每个 Managed Service for Apache Spark 映像版本上安装的 Cloud Storage 连接器版本均列在 Managed Service for Apache Spark 映像版本页面中。- 如果您为 gRPC Cloud Storage 请求创建并使用
Managed Service for Apache Spark on GKE 虚拟集群
,建议结合使用 GKE 版本
1.28.5-gke.1199000和gke-metadata-server 0.4.285。 此组合支持直接连接。
- 如果您为 gRPC Cloud Storage 请求创建并使用
Managed Service for Apache Spark on GKE 虚拟集群
,建议结合使用 GKE 版本
您或您的组织管理员必须授予 Identity and Access Management 角色,这些角色可提供设置 Cloud Storage 连接器并向其发出 gRPC 请求所需的权限。这些角色可以包括以下内容:
- 用户角色:Dataproc Editor 向用户授予以允许他们创建集群和提交作业的角色
- 服务账号角色:向 Managed Service for Apache Spark 虚拟机服务账号 授予以允许在集群虚拟机上运行的应用查看、读取、创建和写入 Cloud Storage 对象的Storage Object User 角色。
在 Cloud Storage 连接器上启用 gRPC
您可以在集群级层或作业级层为 Cloud Storage 连接器启用 gRPC。在集群上启用 gRPC 后,Cloud Storage 连接器读取请求会使用 gRPC。如果在作业上(而不是在集群级层)启用 gRPC,则 Cloud Storage 连接器读取请求仅会对作业使用 gRPC。
启用集群
如需在集群级层为 Cloud Storage 连接器启用 gRPC,
请在
创建 Managed Service for Apache Spark 集群时设置 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.pyPySpark 脚本,该脚本使用 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 参考文档。