与 Google Cloud Storage 和 BigQuery 集成

与 Google Cloud Storage 和 BigQuery 集成

本文档描述了如何在 SparkApplication 中使用 Google Cloud 服务(例如 Google Cloud Storage (GCS) 和 BigQuery)作为数据源或数据汇。有关构建访问 GCS 和 BigQuery 的 Spark 应用程序的详细教程,请参阅 使用 Kubernetes Engine 上的 Spark 处理 BigQuery 中的数据

Spark 应用程序需要 GCSBigQuery 连接器才能使用 Hadoop FileSystem API 访问 GCS 和 BigQuery。使连接器可用于驱动程序和执行程序的一种方法是使用内置这些连接器的自定义 Spark 镜像,如这个示例 Dockerfile 所示。从这个 Dockerfile 构建的镜像位于 gcr.io/ynli-k8s/spark:v2.3.0-gcs

连接器需要正确设置某些 Hadoop 属性才能工作。设置 Hadoop 属性可以通过自定义 Hadoop 配置文件(即自定义镜像中的 core-site.xml),或通过 SparkApplication 中的 spec.hadoopConf 部分来完成。上面提到的示例 Dockerfile 展示了如何使用自定义的 core-site.xml 和自定义的 spark-env.sh,后者将环境变量 HADOOP_CONF_DIR 指向容器中 core-site.xml 所在的目录。示例 core-site.xmlspark-env.sh 可在此处找到

GCS 和 BigQuery 连接器在使用 GCS 和 BigQuery 服务之前需要进行身份验证。连接器支持使用 GCP 服务账号 JSON 密钥文件进行身份验证。该服务账号必须被授予访问 GCS 和/或 BigQuery 所需的 IAM 角色。该教程详细介绍了如何创建服务账号、授予正确的角色、提供密钥以及下载 JSON 密钥文件。要告知连接器使用服务 JSON 密钥文件进行身份验证,必须设置以下 Hadoop 配置属性

google.cloud.auth.service.account.enable=true
google.cloud.auth.service.account.json.keyfile=<path to the service account JSON key file in the container>

将服务账号 JSON 密钥文件放入驱动程序和执行程序容器中最常见的方法是通过 Kubernetes Secret 卷挂载密钥文件。关于如何创建 Secret 的详细信息可以在教程中找到。

下面是一个使用 gcr.io/ynli-k8s/spark:v2.3.0-gcs 自定义镜像的示例 SparkApplication,该镜像内置了 GCS/BigQuery 连接器和上面提到的自定义 Hadoop 配置文件。请注意,一些必需的 Hadoop 配置属性是使用 spec.hadoopConf 设置的。这些 Hadoop 配置属性是内置 core-site.xml 中设置的属性的补充。将它们设置在此处而不是 core-site.xml 中是因为它们具有应用程序特定的性质。在 core-site.xml 中设置的属性适用于所有使用该镜像的应用程序。另请注意,存储服务账号 JSON 密钥文件的名为 gcs-bg 的 Kubernetes Secret 如何同时挂载到驱动程序和执行程序中。使用 gcr.io/ynli-k8s/spark:v2.3.0-gcs 镜像时,必须设置环境变量 GCS_PROJECT_ID

apiVersion: "sparkoperator.k8s.io/v1beta2"
kind: SparkApplication
metadata:
  name: foo-gcs-bg
spec:
  type: Java
  mode: cluster
  image: gcr.io/ynli-k8s/spark:v2.3.0-gcs
  imagePullPolicy: Always
  hadoopConf:
    "fs.gs.project.id": "foo"
    "fs.gs.system.bucket": "foo-bucket"
    "google.cloud.auth.service.account.enable": "true"
    "google.cloud.auth.service.account.json.keyfile": "/mnt/secrets/key.json"
  driver:
    cores: 1
    secrets:
    - name: "gcs-bq"
      path: "/mnt/secrets"
      secretType: GCPServiceAccount
    envVars:
      GCS_PROJECT_ID: foo
    serviceAccount: spark
  executor:
    instances: 2
    cores: 1
    memory: "512m"
    secrets:
    - name: "gcs-bq"
      path: "/mnt/secrets"
      secretType: GCPServiceAccount
    envVars:
      GCS_PROJECT_ID: foo

反馈

此页面有帮助吗?


上次修改时间:2024 年 6 月 22 日:添加 spark-operator 文档 (#3767) (b622672)