高级配置:在多个用户之间共享开发终端节点 - Amazon连接词
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

高级配置:在多个用户之间共享开发终端节点

本节介绍如何在典型使用案例中利用 SageMaker 笔记本电脑的开发终端节点在多个用户之间共享开发终端节点。

单租户配置

在单租户使用案例中,为了简化开发人员体验并避免争用资源,建议您让每个开发人员针对他们正在处理的项目使用自己的开发终端节点。这也简化了与工作人员类型和 DPU 计数相关的决策,让他们由他们正在处理的开发人员和项目决定。

除非同时运行多个笔记本文件,否则无需处理资源分配。如果您同时在多个笔记本文件中运行代码,将同时启动多个 Livy 会话。要隔离 Spark 群集配置以便同时运行多个 Livy 会话,您可以按照多租户使用案例中引入的步骤进行操作。

多租户配置

注意

请注意,开发端点旨在模拟Amazon GlueETL 环境作为单租户环境。虽然多租户使用是可能的,但这是一个高级用例,建议大多数用户为每个开发端点维护单租户模式。

在多租户使用情况下,您可能需要处理资源分配。关键因素是同时使用 Jupyter 笔记本的并发用户的数量。如果您的团队在 “关注太阳” 工作流中工作,并且每个时区只有一个 Jupyter 用户,则并发用户的数量只有一个,因此您无需担心资源分配。但是,如果您的笔记本在多个用户之间共享,并且每个用户都以临时的方式提交代码,那么您需要考虑以下几点。

要在多个用户之间隔离 Spark 群集资源,您可以使用 SparkMagic 配置。有两种不同的方法来配置 SparkMagic。

(A) 使用%% 配置-f 指令

如果要从笔记本中修改每个 Livy 会话的配置,可以运行%%configure -f指令。

例如,如果您想要对 5 个执行程序运行 Spark 应用程序,则可以对笔记本段落运行以下命令。

%%configure -f {"numExecutors":5}

然后,您将在 Spark UI 上看到只有 5 个执行程序正在运行该作业。

我们建议限制动态资源分配的最大执行程序数量。

%%configure -f {"conf":{"spark.dynamicAllocation.maxExecutors":"5"}}

(B) 修改闪光魔术 Config 文件

闪光魔术的作品基于Livy API。SparkMagic 创建利维会话的配置如driverMemorydriverCoresexecutorMemoryexecutorCoresnumExecutorsconf、等 这些是决定整个 Spark 群集消耗多少资源的关键因素。SparkMagic 允许您提供一个配置文件来指定那些被发送到 Livy 的参数。你可以看到一个示例配置文件在这个GitHub 存储库

如果要从笔记本上修改所有 Livy 会话的配置,可以修改/home/ec2-user/.sparkmagic/config.json添加session_config

要修改 SageMaker 笔记本实例上的配置文件,可以执行以下步骤。

  1. 打开 SageMaker 笔记本电脑。

  2. 打开终端内核。

  3. 运行以下命令:

    sh-4.2$ cd .sparkmagic sh-4.2$ ls config.json logs sh-4.2$ sudo vim config.json

    例如,您可以将这些行添加到/home/ec2-user/.sparkmagic/config.json并从笔记本重新启动 Jupyter 内核。

    "session_configs": { "conf": { "spark.dynamicAllocation.maxExecutors":"5" } },

指南和最佳实践

为了避免这种资源冲突,您可以使用以下基本方法:

  • 具有更大的 Spark 群集,方法是增加NumberOfWorkers(水平缩放)并升级workerType(垂直扩展)

  • 每个用户分配更少的资源(每个 Livy 会话的资源更少)

您的方法将取决于您的使用案例。如果您拥有较大的开发终端节点,并且没有大量数据,则资源冲突的可能性将显著降低,因为 Spark 可以根据动态分配策略分配资源。

如上所述,Spark 执行程序的数量可以根据 DPU(或NumberOfWorkers)和工作人员类型。每个 Spark 应用程序都会启动一个驱动程序和多个执行程序。要计算您将需要NumberOfWorkers=NumberOfExecutors + 1。下面的矩阵根据并发用户的数量解释了您的开发终端节点需要多少容量。

并发笔记本用户数 要为每个用户分配的 Spark 执行程序数 开发端点的工作人员总数
3 5 18
10 5 60
50 5 300

如果要为每个用户分配更少的资源,则spark.dynamicAllocation.maxExecutors(或numExecutors)将是配置为 Livy 会话参数的最简单参数。如果将以下配置设置为/home/ec2-user/.sparkmagic/config.json,那么 SparkMagic 将为每个 Livy 会话分配最多 5 个执行者。这将有助于每个 Livy 会话隔离资源。

"session_configs": { "conf": { "spark.dynamicAllocation.maxExecutors":"5" } },

假设有一个具有 18 个工作程序(G.1X)的开发端点,并且同时有 3 个并发笔记本用户。如果您的会话配置具有spark.dynamicAllocation.maxExecutors=5那么每个用户可以使用 1 个驱动程序和 5 个执行程序。即使您同时运行多个笔记本段落,也不会发生任何资源冲突。

权衡

使用此会话配置"spark.dynamicAllocation.maxExecutors":"5",您将能够避免资源冲突错误,并且在存在并发用户访问时不需要等待资源分配。但是,即使有许多可用资源(例如,没有其他并发用户),Spark 也不能为您的 Livy 会话分配 5 个以上的执行程序。

其他说明

停止使用笔记本电脑时,最好停止 Jupyter 内核。这将释放资源,其他笔记本用户可以立即使用这些资源,而无需等待内核过期(自动关闭)。

常见问题

即使遵循指南,你也可能会遇到某些问题。

未找到会话

当您尝试运行笔记本段落,即使您的 Livy 会话已经终止,您将看到以下消息。要激活 Livy 会话,您需要通过选择内核 >Restart (重新启动),然后再次运行笔记本段落。

An error was encountered: Invalid status code '404' from http://localhost:8998/sessions/13 with error payload: "Session '13' not found."

YARN 资源不足

当您尝试运行笔记本段落,即使您的 Spark 群集没有足够的资源来启动新的 Livy 会话,您将看到以下消息。您通常可以通过遵循指南来避免此问题,但是,您可能会遇到此问题。要解决此问题,你可以检查是否有任何不需要的活动 Livy 会话。如果存在不需要的 Livy 会话,则需要终止它们才能释放群集资源。有关详细信息,请参阅下一节。

Warning: The Spark session does not have enough YARN resources to start. The code failed because of a fatal error: Session 16 did not start up in 60 seconds.. Some things to try: a) Make sure Spark has enough available resources for Jupyter to create a Spark context. b) Contact your Jupyter administrator to make sure the Spark magics library is configured correctly. c) Restart the kernel.

监控和调试

本节介绍监视资源和会话的技术。

监控和调试集群资源分配

您可以观看 Spark UI 来监控每个 Livy 会话分配的资源数量,以及作业上的有效 Spark 配置是什么。要激活 Spark 用户界面,请参阅为开发终端节点启用 Apache Spark Web UI

(可选)如果需要 Spark UI 的实时视图,则可以针对 Spark 群集上运行的 Spark 历史服务器配置 SSH 隧道。

ssh -i <private-key.pem> -N -L 8157:<development endpoint public address>:18080 glue@<development endpoint public address>

然后您可以在浏览器上打开 http://localhost:8157 以查看 Spark UI。

免费不需要的 Livy 会话

查看这些过程以关闭笔记本电脑或 Spark 群集中的任何不需要的 Livy 会话。

(a) 项. 从笔记本终止 Livy 会话

您可以关闭 Jupyter 笔记本上的内核以终止不需要的 Livy 会话。

(b) 项. 终止 Spark 群集中的 Livy 会话

如果仍在运行不需要的 Livy 会话,您可以关闭 Spark 群集上的 Livy 会话。

作为执行此过程的先决条件,您需要为开发终端节点配置 SSH 公钥。

要登录 Spark 群集,您可以运行以下命令:

$ ssh -i <private-key.pem> glue@<development endpoint public address>

您可以运行以下命令查看活动 Livy 会话:

$ yarn application -list 20/09/25 06:22:21 INFO client.RMProxy: Connecting to ResourceManager at ip-255-1-106-206.ec2.internal/172.38.106.206:8032 Total number of applications (application-types: [] and states: [SUBMITTED, ACCEPTED, RUNNING]):2 Application-Id Application-Name Application-Type User Queue State Final-State Progress Tracking-URL application_1601003432160_0005 livy-session-4 SPARK livy default RUNNING UNDEFINED 10% http://ip-255-1-4-130.ec2.internal:41867 application_1601003432160_0004 livy-session-3 SPARK livy default RUNNING UNDEFINED 10% http://ip-255-1-179-185.ec2.internal:33727

然后,您可以使用以下命令关闭 Livy 会话:

$ yarn application -kill application_1601003432160_0005 20/09/25 06:23:38 INFO client.RMProxy: Connecting to ResourceManager at ip-255-1-106-206.ec2.internal/255.1.106.206:8032 Killing application application_1601003432160_0005 20/09/25 06:23:39 INFO impl.YarnClientImpl: Killed application application_1601003432160_0005