Google Kubernetes Engine 上的 Dataproc

概览

您可通过此功能,从 Dataproc Jobs API 将 Spark 作业提交到正在运行的 Google Kubernetes Engine 集群。

此功能可用于:

  • 部署统一资源管理
  • 隔离 Spark 作业以加速分析生命周期

在 GKE 上运行 Dataproc 作业

  1. 创建 GKE 集群

    需要一个运行中的 GKE 集群作为 Dataproc 组件的部署平台。

    gcloud

    设置环境变量,然后在本地或在 Cloud Shell 中运行 gcloud beta container clusters create 命令,以创建可用作 Dataproc 集群的 GKE 集群。

    1. 设置环境变量。
      • 只需设置 gke-cluster-name。请仅使用小写字母数字和“-”。
      • 设置集群 region,例如“us-central1”。
      • 将集群 zone 设置为所选区域中的地区,例如“us-central1-a”。
      GKE_CLUSTER=gke-cluster-name \
        GCE_REGION=region
      
    2. 运行 gcloud 命令。
      • --scopes 设置为“cloud-platform”,以将集群服务帐号用作权限机制。
      • --workload-metadata 设置为“GCE_METADATA”以使用 Compute Engine 虚拟机身份验证。
      • --machine-type 设置为“n1-standard-4”(建议至少使用 4 个 CPU)。
      gcloud beta container clusters create "${GKE_CLUSTER}" \
          --scopes=cloud-platform \
          --workload-metadata=GCE_METADATA \
          --machine-type=n1-standard-4 \
          --region="${GCE_REGION}"
      
  2. 创建 Dataproc-on-GKE 集群

    此步骤将 Dataproc 集群分配到现有 GKE 集群,部署将 GKE 集群与 Dataproc 服务关联的组件,以允许提交 Spark 作业。

    gcloud

    设置环境变量,然后在本地或在 Cloud Shell 中运行 gcloud beta dataproc clusters create 命令以创建 Dataproc-on-GKE 集群。

    1. 设置环境变量。
      • 请仅对 dataproc-cluster-name 使用小写字母数字和“-”。
      • 指定 GKE 上的 Dataproc version,例如“1.4.27-beta”。
      • 为暂存工件指定 Cloud Storage bucket URI。

      DATAPROC_CLUSTER=dataproc-cluster-name \
        VERSION=version \
        BUCKET=bucket-name
      

    2. 运行 gcloud 命令。

      gcloud beta dataproc clusters create "${DATAPROC_CLUSTER}" \
          --gke-cluster="${GKE_CLUSTER}" \
          --region="${GCE_REGION}" \
          --image-version="${VERSION}" \
          --bucket="${BUCKET}"
      

      注意:

      • 上述命令将在 GKE 集群中自动生成命名空间,但您可以通过添加 --gke-cluster-namespace 参数来指定该命名空间。
      • 您必须将 Kubernetes Engine Admin IAM 角色授予 Dataproc Service Agent 服务帐号。该服务帐号的格式如下:service-{your-project-number}@dataproc-accounts.iam.gserviceaccount.com

        • 仅对于 1.4.23-beta 版本,您还必须通过 Kubernetes Engine Admin IAM 角色授予 Dataproc 安装帐号 service-51209575642@gcp-sa-saasmanagement.iam.gserviceaccount.com Kubernetes 集群的访问权限。

  3. 提交 Spark 作业

    使用 gcloud dataproc 命令、Dataproc Jobs API 和 Cloud Console 将 Spark 作业提交到 Dataproc 集群(参见提交作业)。

    Spark 作业示例

    gcloud dataproc jobs submit spark \
        --cluster="${DATAPROC_CLUSTER}" \
        --region="${GCE_REGION}" \
        --class=org.apache.spark.examples.SparkPi \
        --jars=file:///usr/lib/spark/examples/jars/spark-examples.jar
    

    PySpark 作业示例

    gcloud dataproc jobs submit pyspark \
        --cluster="${DATAPROC_CLUSTER}" foo.py \
        --region="${GCE_REGION}"
    

    SparkR 作业示例

    gcloud dataproc jobs submit spark-r \
        --cluster="${DATAPROC_CLUSTER}" file:/usr/lib/spark/examples/src/main/r/dataframe.R \
        --region="${GCE_REGION}"
    

版本

在 GKE 集群上创建 Dataproc需要指定版本号。版本号对应于必需组件和可选组件的特定软件包,这些组件将安装在 Dataproc 集群特定命名空间中的集群上。下表列出了可用的版本。

版本 组件 默认图片 备注
1.4.23-beta Dataproc 作业代理,Spark 运算符 Spark:gcr.io/cloud-dataproc/spark:1.4.23-deb9-beta
  • 支持 Spark、PySpark 和 SparkR 作业类型
  • 需要向 service-51209575642@gcp-sa-saasmanagement.iam.gserviceaccount.com 服务帐号授予 Kubernetes Engine Admin IAM 角色
1.4.27-beta Dataproc 作业代理,Spark 运算符 Spark:gcr.io/cloud-dataproc/spark:1.4.27-deb9-beta
  • 支持 Spark、PySpark 和 SparkR 作业类型

Dataproc Docker 映像

相应集群会根据创建 Dataproc 集群时指定的版本自动使用适当的默认 Dataproc Docker 映像。该映像的默认配置使用 Cloud Storage 连接器来配置 Spark。您可以在版本文档中查看默认映像。

日志记录

在 GKE 集群和命名空间下的 Stackdriver Logging中可用的作业驱动器和执行器日志。

问题排查

  • 停滞的驱动程序 Spark 2.4.1+ 有一个已知问题 SPARK-27812,驱动程序(尤其是 PySpark 驱动程序)会因 Kubernetes 客户端线程停滞。如需解决此问题,请在 SparkSession 上调用 spark.stop() 或对 SparkContext 调用 sc.stop(),从而停止 SparkSession 或 SparkContext。

清理

要删除已分配的资源,请使用以下 gcloud delete 命令。为避免错误,请先删除 Dataproc 集群,然后再删除 GKE 集群。

删除 Dataproc 集群资源。

gcloud beta dataproc clusters delete "${DATAPROC_CLUSTER}" \
    --region=${GCE_REGION}

删除 GKE 集群。

gcloud beta container clusters delete "${GKE_CLUSTER}"  \
  --region="${GCE_REGION}"