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

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

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

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

单租户配置

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

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

多租户配置

注意

请注意,开发端点旨在将AWSGlueETL环境仿真为单租户环境。虽然可以多租户使用,但这是高级用例,并且建议大多数用户为每个开发端点管理单租户模式。

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

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

(A)使用%%configure-f指令

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

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

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

然后,在SparkUI上,您只能看到为作业运行的5个执行器。

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

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

(B)修改 SparkMagic 配置文件

SparkMagic 工作基于 留置API. SparkMagic 创建具有配置(例如)的Levy会话 driverMemory, driverCores, executorMemory, executorCores, numExecutors, conf等。这些是决定整个Spark群集消耗多少资源的关键因素。SparkMagic 允许您提供配置文件以指定发送到Levy的参数。您可以在此中查看示例配置文件 Github存储库.

如果要从笔记本修改所有Levy会话的配置,可以修改 /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" } },

指南和最佳实践

为了避免此类资源冲突,您可以使用一些基本方法,例如:

  • 通过增加 NumberOfWorkers (水平缩放)并升级 workerType (垂直扩展)

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

您的方法将取决于您的用例。如果开发端点较大,数据量不大,则资源冲突的可能性会显著降低,因为Spark可以根据动态分配策略来分配资源。

如上所述,Spark执行器的数量可以基于DPU(或者 NumberOfWorkers)和工人类型。每个Spark应用程序启动一个驱动程序和多个执行器。要计算,您需要 NumberOfWorkers =人 NumberOfExecutors + 1。下面的矩阵根据并发用户的数量,说明开发端点需要多少容量。

并发笔记本用户数 您要为每个用户分配的Spark执行器数 合计 NumberOfWorkers 您的开发端点
3 5 18
10 5 60
50 5 300

如果要为每个用户分配更少的资源, spark.dynamicAllocation.maxExecutors (或 numExecutors)是配置为Levy会话参数的最简单参数。如果在中设置了以下配置 /home/ec2-user/.sparkmagic/config.json,然后 SparkMagic 将会为每个Levy会话分配最多5个执行程序。这将有助于根据Levy会话分离资源。

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

假设有18个worker的devendpoint(G.1X),同时有3个nocket笔记本用户。如果您的会话配置 spark.dynamicAllocation.maxExecutors=5 则每个用户都可以使用1个驱动程序和5个执行器。即使您同时运行多个笔记本段落,也不会有任何资源冲突。

权衡

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

其他说明

当您停止使用笔记本时,停止Jupyter内核是一个很好的做法。这将释放资源和其他笔记本用户可以立即使用这些资源,而无需等待内核到期(自动关闭)。

常见问题

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

未找到会话

当您尝试运行笔记本段落时,即使您的Levy会话已终止,您也会看到以下消息。要激活Levy会话,您需要通过选择 内核 >的 重启 在Jupyter菜单中,然后再次运行笔记本段落。

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

YARN资源不足

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

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.

监控和调试

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

监控和调试群集资源分配

您可以观看SparkUI,以监控每个Levy会话所分配的资源数量,以及作业的有效Spark配置。要启用SparkUI,请参阅 为开发端点启用ApacheSparkWebUI.

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

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

然后,您可以在浏览器中打开http://localhost:8157以查看SparkUI。

免费不需要的Levy会话

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

(a)。从笔记本上终止Levy会话

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

(b)。从Spark群集终止Levy会话

如果存在仍然运行的不需要的Levy会话,则可以关闭Spark群集中的Levy会话。

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

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

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

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

$ 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

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

$ 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