使用 JupyterLab 扩展程序开发无服务器 Spark 工作负载

本文档介绍了如何在有权访问 Google 服务的机器或自有虚拟机上安装和使用 JupyterLab 扩展程序。此外,还介绍了如何开发和部署无服务器 Spark 笔记本代码。

只需几分钟即可安装此扩展程序,即可使用以下功能:

  • 启动无服务器 Spark 和 BigQuery 笔记本,快速开发代码
  • 在 JupyterLab 中浏览和预览 BigQuery 数据集
  • 在 JupyterLab 中修改 Cloud Storage 文件
  • 在 Composer 上安排笔记本运行

准备工作

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Enable the Dataproc API.

    Enable the API

  4. Install the Google Cloud CLI.

  5. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Enable the Dataproc API.

    Enable the API

  9. Install the Google Cloud CLI.

  10. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. 安装 JupyterLab 扩展程序

    您可以在有权访问 Google 服务的机器或虚拟机(例如本地机器或 Compute Engine 虚拟机实例)上安装和使用 JupyterLab 扩展程序。

    如需安装该扩展程序,请按以下步骤操作:

    1. python.org/downloads 下载并安装 Python 3.11 或更高版本。

      • 验证 Python 3.11 或更高版本的安装情况。
        python3 --version
        
    2. 虚拟化 Python 环境。

      pip3 install pipenv
      

      • 创建一个安装文件夹。
        mkdir jupyter
        
      • 切换到安装文件夹。
        cd jupyter
        
      • 创建虚拟环境。
        pipenv shell
        
    3. 在虚拟环境中安装 JupyterLab。

      pipenv install jupyterlab
      

    4. 安装 JupyterLab 扩展程序。

      pipenv install bigquery-jupyter-plugin
      

    5. 启动 JupyterLab

      jupyter lab
      

      1. JupyterLab 启动器页面会在浏览器中打开。其中包含 Dataproc 作业和会话部分。如果您有权访问 Dataproc Serverless 笔记本或在项目中运行 Jupyter 可选组件的 Dataproc 集群,该标签页还可能包含 Dataproc Serverless NotebooksDataproc Cluster Notebooks 部分。

        JupyterLab 启动器浏览器页面
      2. 默认情况下,您的 Dataproc Serverless for Spark Interactive 会话会在您在开始前须知部分运行 gcloud init 时设置的项目和区域中运行。您可以前往 JupyterLab 的 Settings > Google Dataproc Settings 页面,更改会话的项目和区域设置。

        您必须重启扩展程序,所做的更改才会生效。

    创建 Dataproc Serverless 运行时模板

    Dataproc Serverless 运行时模板(也称为会话模板)包含用于在会话中执行 Spark 代码的配置设置。您可以使用 Jupyterlab 或 gcloud CLI 创建和管理运行时模板。

    JupyterLab

    1. 在 JupyterLab Launcher 页面的 Dataproc Serverless Notebooks 部分中,点击 New runtime template 卡片。

    2. 填写运行时模板表单。

      • 模板信息

        • 显示名称运行时 ID说明:接受或填写模板显示名称、模板运行时 ID 和模板说明。
      • 执行配置:选择用户账号以使用用户身份(而非 Dataproc 服务账号身份)执行笔记本。

        • 服务账号:如果未指定服务账号,则系统会使用 Compute Engine 默认服务账号
        • 运行时版本:确认或选择运行时版本
        • 自定义容器映像:可选择指定自定义容器映像的 URI。
        • Python 软件包仓库:默认情况下,当用户在笔记本中执行 pip 安装命令时,系统会从 PyPI 拉取缓存下载并安装 Python 软件包。您可以指定贵组织的私有工件代码库,以供 Python 软件包用作默认 Python 软件包代码库。
      • 加密:接受默认的 Google-owned and Google-managed encryption key,或选择客户管理的加密密钥 (CMEK)。如果是 CMEK,请选择提供密钥信息。

      • 网络配置:选择项目中的子网或从宿主项目共享的子网(您可以通过 JupyterLab 的 Settings > Google Dataproc Settings 菜单更改项目)。您可以指定要应用于指定网络的网络标记。请注意,Dataproc Serverless 会在指定子网上启用专用 Google 访问通道 (PGA)。如需了解网络连接性要求,请参阅 Dataproc Serverless for Spark 网络配置

      • 会话配置:您可以选择填写这些字段,以限制使用模板创建的会话时长。

        • 空闲时长上限:会话终止前的空闲时长上限。允许的范围:10 分钟到 336 小时(14 天)。
        • 会话时长上限:会话在终止之前的生命周期上限。允许的范围:10 分钟到 336 小时(14 天)。
      • Metastore:如需将 Dataproc Metastore 服务与您的会话搭配使用,请选择 Metastore 项目 ID 和服务。

      • 永久性历史记录服务器:您可以选择一个可用的 Persistent Spark History Server,以便在会话期间和会话结束后访问会话日志。

      • Spark 属性:您可以选择并添加 Spark 资源分配自动扩缩GPU 属性。点击添加属性以添加其他 Spark 属性。如需了解详情,请参阅 Spark 属性

      • 标签:针对要为使用该模板创建的会话设置的每个标签点击添加标签

    3. 点击保存以创建模板。

    4. 如需查看或删除运行时模板,请执行以下操作:

      1. 依次点击设置 > Google Dataproc 设置
      2. “Dataproc Serverless 运行时模板”部分会显示运行时模板列表。
        • 点击模板名称可查看模板详细信息。
        • 您可以从模板的操作菜单中删除模板。
    5. 打开并重新加载 JupyterLab Launcher 页面,以在 JupyterLab Launcher 页面上查看已保存的笔记本模板卡片。

    gcloud

    1. 使用运行时模板配置创建 YAML 文件。

      简单的 YAML

      environmentConfig:
        executionConfig:
          networkUri: default
      jupyterSession:
        kernel: PYTHON
        displayName: Team A
      labels:
        purpose: testing
      description: Team A Development Environment
      

      复杂的 YAML

      description: Example session template
      environmentConfig:
        executionConfig:
          serviceAccount: sa1
          # Choose either networkUri or subnetworkUri
          networkUri:
          subnetworkUri: default
          networkTags:
           - tag1
          kmsKey: key1
          idleTtl: 3600s
          ttl: 14400s
          stagingBucket: staging-bucket
        peripheralsConfig:
          metastoreService: projects/my-project-id/locations/us-central1/services/my-metastore-id
          sparkHistoryServerConfig:
            dataprocCluster: projects/my-project-id/regions/us-central1/clusters/my-cluster-id
      jupyterSession:
        kernel: PYTHON
        displayName: Team A
      labels:
        purpose: testing
      runtimeConfig:
        version: "2.3"
        containerImage: gcr.io/my-project-id/my-image:1.0.1
        properties:
          "p1": "v1"
      description: Team A Development Environment
      

    2. 在本地或 Cloud Shell 中运行以下 gcloud beta dataproc session-templates import 命令,从 YAML 文件创建会话(运行时)模板:

      gcloud beta dataproc session-templates import TEMPLATE_ID \
          --source=YAML_FILE \
          --project=PROJECT_ID \
          --location=REGION
      

    启动和管理笔记本

    安装 Dataproc JupyterLab 扩展程序后,您可以点击 JupyterLab Launcher 页面上的模板卡片,执行以下操作:

    在 Dataproc Serverless 上启动 Jupyter 笔记本

    JupyterLab 启动器页面上的 Dataproc Serverless Notebooks 部分会显示与 Dataproc Serverless 运行时模板对应的笔记本模板卡片(请参阅创建 Dataproc Serverless 运行时模板)。

    1. 点击某个卡片即可创建 Dataproc Serverless 会话并启动一个笔记本。会话创建完成且记事本内核可供使用后,内核状态会从 Starting 更改为 Idle (Ready)

    2. 编写和测试笔记本代码。

      1. 将以下 PySpark Pi estimation 代码复制并粘贴到 PySpark 笔记本单元格中,然后按 Shift+Enter 运行代码。

        import random
            
        def inside(p):
            x, y = random.random(), random.random()
            return x*x + y*y < 1
            
        count = sc.parallelize(range(0, 10000)) .filter(inside).count()
        print("Pi is roughly %f" % (4.0 * count / 10000))

        笔记本结果:

    3. 创建并使用笔记本后,您可以点击内核标签页中的关闭内核来终止笔记本会话。

      • 如需重复使用会话,请从 File>>New 菜单中选择 Notebook 以创建新笔记本。创建新笔记本后,从内核选择对话框中选择现有会话。新笔记本将重复使用会话,并保留上一个笔记本中的会话上下文。
    4. 如果您未终止会话,Dataproc 会在会话空闲计时器到期时终止会话。您可以在运行时模板配置中配置会话空闲时间。默认会话空闲时间为 1 小时。

    在 Dataproc on Compute Engine 集群上启动笔记本

    如果您创建了 Dataproc on Compute Engine Jupyter 集群,则 JupyterLab Launcher 页面会包含一个包含预安装的 kernel 卡的 Dataproc Cluster Notebook 部分。

    如需在 Dataproc on Compute Engine 集群上启动 Jupyter 笔记本,请执行以下操作:

    1. 点击 Dataproc 集群笔记本部分中的某个卡片。

    2. 当内核状态从 Starting 更改为 Idle (Ready) 时,您就可以开始编写和执行笔记本代码了。

    3. 创建并使用笔记本后,您可以通过点击内核标签页中的关闭内核来终止笔记本会话。

    在 Cloud Storage 中管理输入和输出文件

    分析探索性数据和构建机器学习模型通常涉及基于文件的输入和输出。Dataproc Serverless 会访问 Cloud Storage 上的这些文件。

    • 如需访问 Cloud Storage 浏览器,请点击 JupyterLab Launcher 页面边栏中的 Cloud Storage 浏览器图标,然后双击某个文件夹以查看其内容。

    • 您可以点击 Jupyter 支持的文件类型,以打开和修改这些文件。保存对文件的更改后,系统会将其写入 Cloud Storage。

    • 如需创建新的 Cloud Storage 文件夹,请点击“新建文件夹”图标,然后输入文件夹的名称。

    • 如需将文件上传到 Cloud Storage 存储桶或文件夹,请点击“上传”图标,然后选择要上传的文件。

    开发 Spark 笔记本代码

    安装 Dataproc JupyterLab 扩展程序后,您可以从 JupyterLab 启动器页面启动 Jupyter 笔记本,以开发应用代码。

    PySpark 和 Python 代码开发

    Dataproc Serverless 和 Dataproc on Compute Engine 集群支持 PySpark 内核。Dataproc on Compute Engine 还支持 Python 内核。

    SQL 代码开发

    如需打开 PySpark 笔记本以编写和执行 SQL 代码,请在 JupyterLab Launcher 页面的 Dataproc Serverless NotebooksDataproc Cluster Notebook 部分中,点击 PySpark 内核卡片。

    Spark SQL 魔法:由于启动 Dataproc 无服务器笔记本的 PySpark 内核预加载了 Spark SQL 魔法,因此您可以先在单元格的顶部输入 %%sparksql magic,然后在单元格中输入 SQL 语句,而不是使用 spark.sql('SQL STATEMENT').show() 来封装 SQL 语句。

    BigQuery SQL:借助 BigQuery Spark 连接器,您的记事本代码可以从 BigQuery 表中加载数据,在 Spark 中执行分析,然后将结果写入 BigQuery 表。

    Dataproc Serverless 2.2 及更高版本的运行时包含 BigQuery Spark 连接器。如果您使用较低版本的运行时启动 Dataproc Serverless 笔记本,则可以通过将以下 Spark 属性添加到 Dataproc Serverless 运行时模板来安装 Spark BigQuery 连接器:

    spark.jars: gs://spark-lib/bigquery/spark-bigquery-with-dependencies_2.12-0.25.2.jar
    

    Scala 代码开发

    使用映像版本 2.0 及更高版本创建的 Dataproc on Compute Engine 集群包含 Apache Toree,这是一个适用于 Jupyter Notebook 平台的 Scala 内核,可提供对 Spark 的交互式访问。

    • 在 JupyterLab Launcher 页面的 Dataproc 集群笔记本部分中,点击 Apache Toree 卡片,以打开用于 Scala 代码开发的笔记本。

      图 1. JupyterLab Launcher 页面中的 Apache Toree 内核卡片。

    使用 Visual Studio Code 扩展程序开发代码

    您可以使用 Google Cloud Visual Studio Code (VS Code) 扩展程序执行以下操作:

    • 在 Dataproc Serverless 笔记本中开发和运行 Spark 代码。
    • 创建和管理 Dataproc Serverless 运行时(会话)模板、交互式会话和批处理工作负载。

    Visual Studio Code 扩展程序是免费的,但您需要为使用的任何Google Cloud 服务(包括 Dataproc、Dataproc Serverless 和 Cloud Storage 资源)支付费用。

    将 VS Code 与 BigQuery 搭配使用:您还可以将 VS Code 与 BigQuery 搭配使用,执行以下操作:

    • 开发和执行 BigQuery 笔记本。
    • 浏览、检查和预览 BigQuery 数据集。

    准备工作

    1. 下载并安装 VS Code
    2. 打开 VS Code,然后在活动栏中点击扩展程序
    3. 使用搜索栏查找 Jupyter 扩展程序,然后点击安装。Microsoft 的 Jupyter 扩展程序是必需的依赖项。

      VS Code 控制台中的 Jupyter 扩展程序列表。

    安装 Google Cloud 扩展程序

    1. 打开 VS Code,然后在活动栏中点击扩展程序
    2. 使用搜索栏找到 Google Cloud Code 扩展程序,然后点击 Install(安装)。

      VS Code 控制台中的 Google Cloud Code 扩展程序。

    3. 如果出现提示,请重启 VS Code。

    现在,VS Code activity 栏中会显示 Google Cloud Code 图标。

    配置扩展程序

    1. 打开 VS Code,然后在活动栏中点击 Google Cloud Code
    2. 打开 Dataproc 部分。
    3. 点击 Login to Google Cloud(登录 Google Cloud)。系统会将您重定向到登录页面,以便您使用自己的凭据登录。
    4. 使用顶层应用任务栏依次前往 Code > 设置 > 设置 > 扩展程序
    5. 找到 Google Cloud Code,然后点击 Manage 图标打开菜单。
    6. 选择设置
    7. Project(项目)和 Dataproc Region(Dataproc 区域)字段中,输入要用于开发笔记本和管理 Dataproc Serverless 资源的 Google Cloud 项目名称和区域。

    开发 Dataproc Serverless 笔记本

    1. 打开 VS Code,然后在活动栏中点击 Google Cloud Code
    2. 打开笔记本部分,然后点击新建 Serverless Spark 笔记本
    3. 选择或创建要用于笔记本会话的新运行时(会话)模板。
    4. 系统会创建一个包含示例代码的新 .ipynb 文件,并在编辑器中打开该文件。

      VS Code 控制台中新增了 Serverless Spark 笔记本。

      现在,您可以在 Dataproc Serverless 笔记本中编写和执行代码。

    创建和管理 Dataproc Serverless 资源

    1. 打开 VS Code,然后在活动栏中点击 Google Cloud Code
    2. 打开 Dataproc 部分,然后点击以下资源名称:

      • 集群:创建和管理集群和作业。
      • 无服务器:创建和管理批处理工作负载和交互式会话。
      • Spark 运行时模板:创建和管理会话模板。

      VS Code 控制台中列出的 Dataproc 资源。

    数据集浏览器

    使用 JupyterLab 数据集资源管理器查看 BigLake Metastore 数据集。

    如需打开 JupyterLab 数据集资源管理器,请点击边栏中的相应图标。

    您可以在“数据集”浏览器中搜索数据库、表或列。点击数据库、表或列名称可查看关联的元数据。

    部署代码

    安装 Dataproc JupyterLab 扩展程序后,您可以使用 JupyterLab 执行以下操作:

    • 在 Dataproc Serverless 基础架构上执行笔记本代码

    • 在 Cloud Composer 上安排笔记本执行

    • 将批处理作业提交到 Dataproc Serverless 基础架构或 Dataproc on Compute Engine 集群。

    在 Cloud Composer 上安排笔记本执行

    完成以下步骤,即可在 Cloud Composer 上安排笔记本代码以批量作业形式在 Dataproc Serverless 或 Dataproc on Compute Engine 集群上运行。

    1. 创建一个 Cloud Composer 环境

    2. 点击记事本右上角的作业调度程序按钮。

    3. 填写创建定期作业表单,提供以下信息:

      • 笔记本执行作业的唯一名称
      • 用于部署该 Notebook 的 Cloud Composer 环境
      • 如果笔记本是参数化的,请输入参数
      • 用于运行笔记本的 Dataproc 集群或无服务器运行时模板
        • 如果选择了集群,则在笔记本在集群上完成执行后是否停止集群
      • 如果笔记本首次执行失败,重试计数和重试延迟(以分钟为单位)
      • 要发送的执行通知和收件人名单。 系统会使用 Airflow SMTP 配置发送通知。
      • 笔记本执行时间表
    4. 点击创建

    5. 成功安排笔记本后,作业名称会显示在 Cloud Composer 环境的预定作业列表中。

    将批量作业提交到 Dataproc Serverless

    • 在 JupyterLab Launcher 页面的 Dataproc Jobs and Sessions 部分中,点击 Serverless 卡片。

    • 点击批量标签页,然后点击创建批量,并填写批量信息字段。

    • 点击提交以提交作业。

    将批量作业提交到 Dataproc on Compute Engine 集群

    • 在 JupyterLab 启动器页面的 Dataproc 作业和会话部分中,点击集群卡片。

    • 点击作业标签页,然后点击提交作业

    • 选择一个集群,然后填写作业字段。

    • 点击提交以提交作业。

    查看和管理资源

    安装 Dataproc JupyterLab 扩展程序后,您可以通过 JupyterLab Launcher 页面上的 Dataproc Jobs and Sessions 部分查看和管理 Dataproc Serverless 和 Dataproc on Compute Engine。

    点击 Dataproc Jobs and Sessions 部分,以显示 ClustersServerless 卡片。

    如需查看和管理 Dataproc Serverless 会话,请执行以下操作:

    1. 点击无服务器卡片。
    2. 点击会话标签页,然后点击某个会话 ID 以打开会话详情页面,查看会话属性、 Google Cloud 在 Logs Explorer 中查看日志以及终止会话。注意:系统会创建一个唯一的 Dataproc Serverless 会话来启动每个 Dataproc Serverless 笔记本。

    如需查看和管理 Dataproc Serverless 批次,请执行以下操作:

    1. 点击批处理标签页可查看当前项目和区域中的 Dataproc Serverless 批处理列表。点击批次 ID 可查看批次详情。

    如需查看和管理 Dataproc on Compute Engine 集群,请执行以下操作:

    1. 点击集群卡片。选择集群标签页,以列出当前项目和区域中处于活动状态的 Dataproc on Compute Engine 集群。您可以点击操作列中的图标来启动、停止或重启集群。点击集群名称可查看集群详情。您可以点击操作列中的图标,以克隆、停止或删除作业。

    如需查看和管理 Dataproc on Compute Engine 作业,请执行以下操作:

    1. 点击作业卡片可查看当前项目中的作业列表。点击作业 ID 即可查看作业详情。