将 Notebooks 扩展到 Dataproc 和 Google Kubernetes Engine

本文档可帮助系统管理员和数据工程师选择在 Google Cloud 上运行 Jupyter 笔记本的最佳方式。本文档假定您熟悉 Jupyter 笔记本Dataproc Hub

本文档是系列文章中的一篇,该系列文章包括以下内容:

本系列文章主要面向为数据科学研究构建 Jupyter 笔记本环境的管理员。

简介

所有规模的公司都会不断积累数据。理解这些数据需要人力与技术资源。数据科学家或数据分析师等最终用户通常通过文本编辑器、集成开发环境 (IDE) 或笔记本环境与数据直接交互。系统管理员创建一个基础架构来协助这些用户进行调查。

最终用户通常有以下需求:

  • 大规模运行交互式任务,以加快开发和调试速度。
  • 从同一笔记本运行数据任务和机器学习任务。
  • 访问满足需求的环境,以提高工作效率。
  • 隔离笔记本与处理基础架构,以避免丢失工作。
  • 快速启动满足硬件和软件要求的环境。

系统管理员通常有以下需求:

  • 集中控制笔记本环境,以方便管理。
  • 自动部署管理笔记本生命周期的平台,以最大限度地减少运营开销。
  • 给予用户有限而充分的访问权限,使他们能够完成工作。
  • 允许用户独立运行他们的作业,以向最终用户提供灵活性。
  • 最大限度地提高资源利用率,以尽量降低费用和开销。

本文档概要介绍了 Google Cloud 上的笔记本选项。系列文章中的其他文档重点介绍如何在 Google Cloud 上自定义和部署 JupyterHub。JupyterHub 帮助组织在多用户情况下管理 Jupyter 笔记本环境。

术语

本系列文章使用以下术语和产品:

  • 产品:Google Cloud 提供和支持的官方和专有服务。
  • 解决方案:使用多个 Google Cloud 产品的架构和开源软件。
  • 管理员:管理资源的人员,这些资源管理着笔记本。
  • 最终用户:使用笔记本运行交互式计算任务的人员。在本系列文章中,最终用户主要是数据科学家。
  • 中心:最终用户用来自定义和启动新笔记本服务器,或访问现有笔记本服务器的 Jupyter 界面的界面。
  • 端点:最终用户用来访问笔记本界面的网址。
  • JupyterHub:一个多用户服务器,向多个用户提供 Jupyter 笔记本并管理笔记本服务器的创建、代理和生命周期。
  • 笔记本服务器配置文件:由管理员创建的配置,用于定义笔记本环境的硬件和软件设置。
  • 生成器:负责启动单用户笔记本服务器的进程。

确定用于部署基于笔记本的平台的产品

以下决策树可帮助您确定在部署基于笔记本的开发平台时要使用的产品或解决方案。

帮助确定在部署基于笔记本的开发平台时要使用的产品或解决方案的决策树。

图中所示的树为您提供了一组决策,可帮助您确定在 Google Cloud 上部署笔记本平台要使用的产品或解决方案。

第一个问题是您是否需要在分布式环境中运行 Apache Spark SDK。其余的决策取决于您对此问题的回答,如下所示。

不,您不需要在分布式环境中运行 Apache Spark

那么,您是否需要在单个实例上使用 Apache Beam SDK,然后在 Dataflow 中运行代码?

  • 如果您确实需要使用 Beam SDK,请使用通过 Apache Beam Direct Runner 在一台机器上提供交互式研究环境的 Notebooks。如需了解详情,请参阅 Notebooks 上的 Apache Beam 文档
  • 如果您不需要使用 Beam SDK,是否需要集中管理处理配置文件?
    • 如果是,请使用 GKE Hub Extended。
    • 如果不是,您是否需要合并费用?如果是,请使用 GKE Hub Extended。如果不是,请使用 Notebooks。

是,您需要在分布式环境中使用 Apache Spark

那么,您是否需要集中管理 Dataproc 集群配置文件?

  • 如果您需要集中管理集群配置文件,是否需要高级 Dataproc Hub 自定义功能?如果是,请使用 Dataproc Hub Extended。如果不是,请使用 Dataproc Hub
  • 如果您不需要集中管理集群配置文件,请使用 Dataproc Notebooks。

选择基础架构

默认情况下,您可以在以下 Google Cloud 产品上为 Jupyter 笔记本运行笔记本服务器:

  • Dataproc:用户通过启用 Spark 的 Dataproc 集群上的 Jupyter 组件运行笔记本服务器。如果您需要在分布式环境中使用 Spark,则此选项非常有用。
  • Notebooks:用户在单个 Compute Engine 实例上运行笔记本服务器。如果工作可以在单个实例上运行,则此选项非常有用。

如果您的处理框架不在分布式环境中使用 Spark,您应首先尝试 Notebooks。如果 Notebooks 不符合您的要求,请考虑 Google Kubernetes Engine (GKE) 选项。

如果您知道是否需要 Dataproc,下一步是确定最终用户应该拥有多大的灵活性。

选择中心

通过中心,管理员可以定义笔记本环境的外观,最终用户可以管理其笔记本环境的生命周期。Google Cloud 使用 Cloud Console 作为默认中心。虽然 Cloud Console 为最终用户提供了灵活性,但有些公司需要额外的管理选项来集中管理笔记本配置文件。原因如下:

  • 通过在有限数量的机器上集中笔记本环境来降低费用并提高资源使用率。
  • 通过向最终用户提供沙盒环境来实施安全性。
  • 通过预定义最终用户点击几下即可启动的笔记本环境来减少重复任务。
  • 通过为笔记本环境使用模板在组织中建立一致性。

如果您由于上述任何原因而不希望最终用户在 Cloud Console 中工作,可以选择以下选项之一:

  • 如果您使用 Dataproc,则可以使用 Dataproc Hub,这是一个在 Notebooks 实例上托管 JupyterHub 并在 Dataproc 上生成笔记本环境的产品。Dataproc Hub 基于开源技术,因此您可以对其进行自定义。
  • 如果您不使用 Dataproc,则对于不基于 Dataproc 的工作负载,Google Cloud 不提供运行 JupyterHub 的代管方式。但是,对于这种情况,您可以使用 GKE Hub Extended,这是一个在 GKE 上运行的轻量级解决方案。

您可以在本文档的以下部分中详细了解这些选项:

Dataproc Hub Extended

如果您的公司在 Google Cloud 上并使用 Spark,您可以使用 Dataproc 大规模处理数据,以及运行训练和推理。借助 Dataproc Hub,您可以集中管理和标准化集群配置,同时为最终用户提供所需的环境。为此,您可以使用集群配置,集群配置是定义了以下文件的声明式 YAML 文件:

  • Dataproc 集群的硬件配置文件
  • 笔记本环境的软件配置文件

例如,您可以将 Dataproc Hub 用于以下场景:

  1. 最终用户根据管理员挑选的配置列表创建自己的笔记本环境。
  2. 当环境从笔记本运行时,最终用户使用 PySpark 以交互方式大规模地探索数据。用户还可以使用 TensorFlow 或 PyTorch 运行机器学习任务。

默认的 Dataproc Hub 架构如下所示:

Dataproc Hub 架构。

Dataproc Hub 使用以下 Google Cloud 产品和开源软件:

  • Dataproc 托管笔记本服务器。
  • Notebooks 提供一个 Compute Engine 实例,用于运行 JupyterHub 并使用反向代理提供对界面的安全且已标识的访问权限。
  • 反向代理服务器是一个开源工具,它接收传入请求并将传入请求转发到相应的后端。Dataproc Hub 使用由 Google 管理的反向代理服务器版本。
  • 反向代理代理是一个开源工具,它与 JupyterHub 一起运行在 Compute Engine 实例上,并在后端与客户端之间匹配请求和响应。
  • Google Cloud 代理的 JupyterHub 身份验证器 (gcp-proxies-authenticator) 使用由反向代理提供的标头来提供透明的用户识别。您可以在 GitHub 上的 Google Cloud 代理的 JupyterHub 身份验证器代码库中找到相关代码。
  • JupyterHub 安装在 Notebooks Compute Engine 实例上,以利用反向代理代理服务。
  • Dataproc 生成器为最终用户提供一个表单,以便他们可以在所选区域中的 Dataproc 上创建笔记本服务器。您可以在 GitHub 上的 Google Cloud 代理的 JupyterHub 身份验证器代码库中找到相关代码。

在某些情况下,您可能需要扩展 Dataproc Hub 的基础版本,以修改整个架构或根据需要调整某些代码。由于 Dataproc Hub 基于开源软件,因此您可以扩展产品的功能。例如,您可以执行以下操作:

GKE Hub Extended

GKE Hub Extended 通过集中计算基础架构来帮助您合并费用。以下架构展示了最终用户如何在 GKE 基础架构上创建自己的沙盒环境。

最终用户可在 GKE 基础架构上创建自己的沙盒环境的架构。

在此架构中,管理员使用笔记本服务器配置文件向一组最终用户提供允许的环境列表。配置文件是定义以下文件的声明式 JSON 对象:

  • Pod 的硬件配置文件
  • 笔记本环境的软件配置文件

在该图中,IT 管理员旁边是作为自定义映像的配置文件模板。当最终用户选择映像时,笔记本服务器在 GKE 节点上启动。在图中,这些服务器由 user-* 框表示。

如图所示,GKE Hub Extended 是一个轻量级解决方案,它使用以下 Google Cloud 产品和开源软件:

  • 反向代理服务器是一个开源工具,它接收传入请求并将传入请求转发到相应的后端。GKE Hub 使用由 Google 管理的反向代理服务器版本。
  • 反向代理代理是一个开源工具,作为自己的 Deployment 在 GKE 上运行,并在后端与客户端之间匹配请求和响应。除了 JupyterHub Deployment 以外,还运行着一个代理,它帮助提供安全的 JupyterHub 界面访问。将用户路由到笔记本服务器的任务由 JupyterHub 处理。如需了解详情,请参阅 GitHub 上反向代理代码库的 README 文件。
  • Google Cloud 代理的 JupyterHub 身份验证器 (gcp-proxies-authenticator) 通过由反向代理提供的标头来提供透明的用户识别。您可以在 GitHub 上的 Google Cloud 代理的 JupyterHub 身份验证器代码库中找到相关代码。
  • KubeSpawner 为最终用户提供一个表单,以便他们可以在托管 JupyterHub 的同一 Kubernetes 集群中创建笔记本服务器。KubeSpawner 还为管理员提供了一种通过 profile_list 参数管理笔记本服务器配置文件的方法。您可以在 GitHub 上的 JupyterHub Kubernetes 生成器代码库中找到相关代码。

代码库中的 GKE Hub 文件夹是一个示例,演示了如何设置本部分中所述的环境。您可以创建父级代码库分支并扩展 GKE Hub 的代码。

选择笔记本的常见考虑事项

在决定如何设置笔记本基础架构以进行实验时,请务必注意以下考虑事项:

  • 界面访问:最终用户如何访问产品界面,包括身份验证和网络访问权限。此决策会影响安全性。
  • 用户与笔记本服务器之间的关系:一个用户是否可以同时使用多个笔记本服务器,或者用户是否只能使用一个笔记本服务器。此决策通常会影响生产力效率和成本。
  • 处理框架:对于计算,您是否有旧版要求或特定的技术要求。Spark 是技术要求的示例。此决策通常会影响工作效率。
  • 底层基础架构:要使用的 Google Cloud 基础架构产品以及用户是否共享基础架构。此决策会影响可伸缩性和费用。

本文档的剩余部分讨论解决每个注意事项的选项。

网页界面访问

最终用户通过端点网址访问笔记本和相关网页界面。端点具有不同的特性:

  • 连接:端点的暴露方式是不公开(例如通过 notebooks.corp.example.com)还是公开(例如通过 notebooks.example.com)。
  • 网络安全:特定网络中的资源是否可以访问端点。
  • 身份验证:用户访问端点时系统如何验证用户的身份。
  • 网域:通过自定义网域还是 Google 提供的网域访问端点。您可以通过 Cloud DNS 或类似解决方案管理自定义网域。
  • 中心:哪些技术可以将用户路由到自己的笔记本服务器。

其中的大多数考虑事项取决于您使用的笔记本平台以及连接的代理。在本系列文章所介绍的架构中,您可以从以下代理中进行选择:

  • IAP:管理 Compute Engine 或 GKE 中运行的 Web 应用(如 JupyterHub)的访问权限的产品。
  • 反向代理:一个开源解决方案,包括反向代理服务器和代理。此系列文章使用由 Google 管理的服务器。
  • 组件网关:由 Dataproc 管理的产品,结合了反向代理和 Apache Knox(一种 API 网关)以帮助提供对 Dataproc Web 端点的安全访问。

为了简化网域管理,Google Cloud 主要为需要外部化网页界面的产品(例如 Jupyter 笔记本)使用反向代理。反向代理使用 Google 管理的网域。

下表列出了上面列表中的每个 Google Cloud 笔记本产品或解决方案的特性。

平台 代理 身份验证 网域 Hub
Dataproc Jupyter 组件网关 由 Google 管理 由代理提供 Cloud Console
Dataproc Hub 反向代理 gcp-proxies-authenticator 由代理提供 基于 JupyterHub
Dataproc Hub Extended 反向代理 gcp-proxies-authenticator 由代理提供 基于 JupyterHub
笔记本 反向代理 由 Google 管理 由代理提供 Cloud Console
GKE Hub Extended 反向代理 gcp-proxies-authenticator 由代理提供 基于 JupyterHub

Dataproc Hub Extended 和 GKE Hub Extended 还可以使用 IAP 和自定义网域。ai-notebook-extended GitHub 代码库提供了一个示例,展示了如何为代管式实例组上的 Dataproc Hub Extended 实现此目的。

用户和笔记本服务器之间的关系

根据您使用的产品,笔记本和用户之间的关系可能会有所不同,如下表所示。

工具 用户 : 笔记本关系
Dataproc Jupyter N:N
Dataproc Hub 1:1
Dataproc Hub Extended 1:1(您可以自定义生成器代码以更改为 1:N)
笔记本 N:N
GKE Hub 1:N(您可以设置生成器以更改为 1:1)

上表中关系的含义如下:

  • 如果您使用 Dataproc Jupyter,则任何有权访问组件网关网址的最终用户都可以访问连接到该网址的笔记本。
  • 如果您使用 Dataproc Hub,则有权访问反向代理网址的最终用户可以访问连接到该网址的中心。但是,该用户无法访问其他用户的笔记本服务器。默认情况下,用户一次只能启动一个单用户笔记本服务器。
  • 如果您使用 Dataproc Hub Extended,则有权访问反向代理网址的最终用户可以访问连接到该网址的中心。但是,该用户无法访问其他用户的笔记本服务器。默认情况下,用户一次只能启动一个单用户笔记本服务器,但您可以自定义生成器代码来更改此行为。
  • 如果您使用 Notebooks,则任何对反向代理网址具有经过身份验证的访问权限的最终用户都可以访问连接到该网址的笔记本。
  • 如果您使用 GKE Hub 解决方案,则有权访问反代理网址的最终用户可以访问连接到该网址的中心。但是,用户只能看到自己的笔记本服务器。默认情况下,如果您启用相关选项,则用户一次可以运行多个单用户笔记本服务器。

请注意以下几点:

  • 要访问反向代理网址后面的界面,用户需要具有托管代理的实例的服务帐号的 serviceAccountUser 角色。
  • 要访问受 IAP 保护的应用,用户需要在 IAP 级层拥有适当的权限。

总结

Google Cloud 提供了运行笔记本的多个选项。本文档系列可帮助您做出正确的决策。请按以下指南操作:

  1. 如果您无需集中管理笔记本服务器配置文件,并且最终用户可以在单个实例上进行操作,请使用 Notebooks 和反向代理。
  2. 如果您无需集中管理笔记本服务器配置文件,并且最终用户需要在分布式环境中使用 Apache Spark,请通过 Dataproc Jupyter 组件和组件网关使用 Dataproc Notebooks。
  3. 如果您需要集中管理笔记本服务器配置文件,并且最终用户需要在分布式环境中使用 Spark,请使用 Dataproc Hub 和反向代理。
  4. 如果您需要自定义 Dataproc Hub,请以 GitHub 中的 Dataproc Hub 解决方案为基础。
  5. 如果您需要集中管理用户环境,并且想要使用 Kubernetes,请在 GKE Hub 示例解决方案的基础上进行构建。如需了解如何使用反向代理设置 GKE Hub,请参阅本系列文章中的教程:在 Google Kubernetes Engine (GKE) 上生成笔记本服务器

使用 Dataproc Hub Extended 和 GKE Hub Extended 的主要优势之一是您可以对其进行充分的自定义。例如,您可以在 GKE 上运行一个中心,并根据需要在 Dataproc 或 GKE 上生成笔记本。如果您需要帮助以进行 GitHub 代码库中没有的自定义设置,请联系您当地的 Google Cloud 团队,了解 Google Cloud 如何提供帮助。

后续步骤