创建 Dataproc Serverless for Spark Interactive 会话

了解如何使用 Dataproc Serverless for Spark Interactive 会话在 Jupyter 笔记本中编写和运行代码。

预览版限制

  • Spark 作业使用服务帐号身份执行,而不是使用提交用户的身份执行。
  • 结算指标不会记录到 Stackdriver(在预览版期间,Dataproc for Spark Serverless Interactive 免费)。
  • 尚不支持 GPU。
  • 无论运行时模板中的 max session time 属性设置如何,会话都会在 24 小时后终止。在正式版中,此限制将被移除。

须知事项

  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. To initialize the gcloud CLI, run the following command:

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

    Go to project selector

  7. Enable the Dataproc API.

    Enable the API

  8. Install the Google Cloud CLI.
  9. To initialize the gcloud CLI, run the following command:

    gcloud init

创建 Dataproc for Spark Serverless Interactive 会话

您可以在 Dataproc Serverless for Spark Interactive 会话中打开 Jupyter 笔记本。在 Dataproc Serverless Interactive 预览版期间,您可以通过两种方式创建会话:

  1. 使用 Dataproc JupyterLab 插件创建模板,以供用户根据模板设置启动会话。

  2. 使用 Vertex AI Workbench 创建 Google 管理的会话。

JupyterLab 插件

以下各部分介绍如何使用 Dataproc JupyterLab 插件创建用户管理器的 Dataproc Serverless for Spark Interactive 会话。

设置机器

您可以在能够访问 Google 服务的机器上设置并运行本快速入门,例如本地机器或 Compute Engine 虚拟机实例

  1. 确保您的机器上安装了 Python 3.8+。您可以从 python.or/downloads 下载并安装 Python。

    1. 验证是否已安装 Python 3.8+。

      python3 --version
  2. 在您的机器上安装 [JupyterLab 3.6.3+]。

    pip3 install --upgrade jupyterlab
    1. 验证 JupyterLab 3.6.3+ 的安装。

      pip3 show jupyterlab
  3. 安装 Dataproc JupyterLab 插件。

    pip3 install dataproc-jupyter-plugin
    1. 如果您的 JupyterLab 版本低于 4.0.0,请启用该插件扩展程序。

      jupyter server extension enable dataproc_jupyter_plugin
  4. 启动 JupyterLab

    jupyter lab
    1. Jupyter 启动器页面会在浏览器中打开。它包含 Dataproc 作业和会话部分。如果您有权访问在项目中运行的 Jupyter 可选组件的 Dataproc 无服务器笔记本或 Dataproc 集群,则它还可以包含 Dataproc 无服务器笔记本Dataproc 集群笔记本部分。

    2. 默认情况下,Dataproc Serverless for Spark Interactive 会话在您在准备工作中运行 gcloud init 时设置的项目和区域中运行。您可以通过 JupyterLab 设置 > Dataproc 设置页面更改会话的项目和区域设置。

创建 Dataproc 无服务器运行时模板

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

JupyterLab

  1. 点击 JupyterLab 启动器页面上 Dataproc Cluster Notebooks 部分中的 New runtime template 卡片。

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

  3. 指定显示名称说明,然后输入或确认其他设置。

    备注:

    • 网络配置子网必须启用专用 Google 访问通道,并且必须允许在所有端口上进行子网通信(请参阅 Dataproc 无服务器的 Spark 网络配置)。 如果您在准备工作部分中运行 gcloud init 时所配置的区域的 default 网络子网未为专用 Google 访问通道启用,则必须为专用 Google 访问通道启用该子网,或者选择其他具有已启用专用 Google 访问通道的区域子网的网络。您可以通过 JupyterLab 设置 > Dataproc 设置页面更改 Dataproc Serverless 使用的区域。

    • Metastore:您可以选择使用本部分中的字段来选择要在会话中使用的可用 Dataproc Metastore 服务

    • 最大空闲时间:在会话自动终止之前笔记本空闲时间上限。允许的范围:10 分钟到 336 小时(14 天)。

    • 最长会话时间:在会话自动终止之前会话的最长生命周期。允许的范围:10 分钟到 336 小时(14 天)。

    • PHS:您可以选择一个可用的 Persistent Spark 历史记录服务器,以便在会话期间和之后访问会话日志。

    • Spark 属性:对于要为无服务器 Spark 会话设置的每个属性,点击添加属性。如需了解受支持和不受支持的 Spark 属性,请参阅 Dataproc Serverless for Spark 网络配置

    • 标签:针对要针对无服务器 Spark 会话设置的每个标签,点击添加标签

  4. Dataproc 设置页面列出了您的运行时模板。对于列出的每个模板,您可以从操作菜单中删除列表中的模板。

  5. 点击保存

  6. 打开并重新加载“启动器”页面,以在 JupyterLab 启动器中查看已保存的笔记本模板卡片。

gcloud

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

    示例:

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

    如果您在准备工作部分中运行 gcloud init 时所配置的区域的 default 网络子网未为专用 Google 访问通道启用,则必须为专用 Google 访问通道启用该子网,或者选择其他具有已启用专用 Google 访问通道的区域子网的网络。您可以通过 JupyterLab 设置 > Dataproc 设置页面更改 Dataproc Serverless 使用的区域。

  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
    

打开笔记本

JupyterLab 启动器页面上的 Dataproc 无服务器笔记本部分会显示映射到无服务器运行时模板指定的运行时内核的笔记本模板卡片。

  1. 点击运行时内核卡,以创建会话并打开笔记本。 会话创建完成且内核可供使用后,内核状态会从 Unknown 更改为 Idle,并且会打开一个笔记本。

    如需查看会话状态,请点击 JupyterLab 启动器页面的 Dataproc 作业和会话部分中的无服务器卡片,然后点击会话标签页。当会话已预配完毕并且可以运行代码时,会话的状态会从 Creating 更改为 Active

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

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

      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. 创建和使用笔记本后,您可以通过点击内核标签页中的关停内核来终止笔记本会话。

    • 如果您没有终止会话,Dataproc 会在会话空闲计时器结束时终止会话。您可以在运行时模板配置中配置会话空闲时间。默认的会话空闲时间为 1 小时。

Vertex AI

本部分介绍如何使用 Vertex AI Workbench 创建代管式会话,然后在该会话中打开和使用 PySpark 笔记本。

  1. 转到 Google Cloud 控制台中的 Vertex AI Workbench 页面。点击新建笔记本以打开新的代管式笔记本。
  2. 填写创建代管式笔记本页面上的字段:
    1. 笔记本名称:为笔记本输入名称。
    2. 区域:从列表中选择一个区域。Vertex AI 代管式笔记本可在所列区域使用。
    3. 权限:选择 Single user only
    4. 用户的电子邮件地址:输入您的电子邮件地址。
    5. 点击创建以创建笔记本并返回 Vertex AI Workbench 页面。
  3. 您的笔记本会列在 Vertex AI Workbench 页面上。 启用此链接后,点击笔记本所在行中的打开 JupyterLab
  4. 在随即显示的对代管式笔记本进行身份验证对话框中,点击身份验证以允许 Vertex AI Workbench 访问您的数据并对您的代管式笔记本进行身份验证,然后选择您的帐号并允许其访问以打开 JupyterLab。
  5. 在笔记本的启动器标签页中,选择 Serverless Spark 以创建一个会话。
  6. 填写创建 Serverless Spark 会话页面:
    1. 会话名称:输入会话的名称。每个会话支持一个 Jupyter 笔记本。
    2. 语言:选择 PySpark
    3. 执行配置:将服务帐号项留空可使用 Compute Engine 默认服务帐号
    4. 网络配置:
      1. 点击此项目中的网络。执行会话的 VPC 子网必须满足 Dataproc Serverless for Spark 网络配置中所列的要求。
      2. 从列表中选择项目中的网络和子网。 该列表会显示所选网络中已为专用 Google 访问通道启用的子网。
    5. 点击提交:启动会话。活动日志会显示会话初始化的进度。
      您还可以在 Google Cloud 控制台的 Dataproc 会话页面中监控会话状态。
  7. 会话初始化完成后,系统会在 JupyterLab 中打开 Untitled.ipynb 笔记本标签页。将以下 PySpark Pi estimation 代码复制并粘贴到 PySpark 笔记本单元格中,然后按 Shift+Return 运行该代码。
    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))
  8. 关闭 Untitled.ipynb 笔记本标签页。在您关闭 JupyterLab 中的笔记本后,Dataproc 无服务器会尝试检测并终止会话。