本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
对日志中的 AWS Glue for Ray 错误进行故障排除
AWS Glue 提供对作业运行期间由 Ray 进程发出的日志的访问权限。如果您在 Ray 作业中遇到错误或意外行为,请先从日志中收集信息以确定失败原因。我们还为交互式会话提供类似的日志。会话日志以 /aws-glue/ray/sessions
前缀提供。
当您的作业运行时,日志行会实时发送到 CloudWatch。运行完成后,打印语句会附加到 CloudWatch 日志中。作业运行后,日志将保留两周。
检查 Ray 作业日志
当作业失败时,收集您的作业名称和作业运行 ID。您可以在 AWS Glue 控制台中找到这些内容。导航到作业页面,然后导航到 Runs(运行)选项卡。Ray 作业日志存储在以下专用 CloudWatch 日志组中。
-
/aws-glue/ray/jobs/script-log/
— 存储您的主 Ray 脚本发出的日志。 -
/aws-glue/ray/jobs/ray-monitor-log/
— 存储 Ray 自动缩放器进程发出的日志。这些日志是针对头节点生成的,而不是为其他 Worker 节点生成的。 -
/aws-glue/ray/jobs/ray-gcs-logs/
- 存储 GCS(全局控制存储)进程发出的日志。这些日志是针对头节点生成的,而不是为其他 Worker 节点生成的。 -
/aws-glue/ray/jobs/ray-process-logs/
- 存储在头节点上运行的其他 Ray 进程(主要是控制面板代理)发出的日志。这些日志是针对头节点生成的,而不是为其他 Worker 节点生成的。 -
/aws-glue/ray/jobs/ray-raylet-logs/
- 存储每个 raylet 进程发出的日志。这些日志是在每个 Worker 节点的单个数据流中收集的。 -
/aws-glue/ray/jobs/ray-worker-out-logs/
- 存储集群中每个工作线程的stdout
日志。这些日志是为每个 Worker 节点生成的,包括头节点。 -
/aws-glue/ray/jobs/ray-worker-err-logs/
- 存储集群中每个工作线程的stderr
日志。这些日志是为每个 Worker 节点生成的,包括头节点。 -
/aws-glue/ray/jobs/ray-runtime-env-log/
- 存储有关 Ray 设置过程的日志。这些日志是为每个 Worker 节点生成的,包括头节点。
Ray 作业错误故障排除
要了解 Ray 日志组的组织结构,并找到可以帮助您解决错误的日志组,需要了解有关 Ray 架构的背景信息。
在 AWS Glue ETL 中,工作线程对应于一个实例。当您为某项 AWS Glue 作业配置工作线程时,您需要设置专用于作业的实例的类型和数量。Ray 以不同的方式使用工件一词。
Ray 使用头节点和 Worker 节点来区分 Ray 集群中实例的职责。Ray Worker 节点可以托管多个操作者进程,这些进程执行计算以实现分布式计算的结果。运行函数副本的操作者称为副本。副本操作者也可以称为工作线程进程。副本也可以在头节点上运行,该节点被称为头节点,因为它运行其他进程来协调集群。
参与计算的每个操作者都会生成自己的日志流。这为我们提供了一些见解:
-
发出日志的进程数量,可能大于分配给作业的工作线程数量。通常,每个实例上的每个核心都有一个操作者。
-
Ray 头节点发出集群管理和启动日志。相比之下,Ray Worker 节点只会发出在其上执行的工作的日志。
有关 Ray 架构的更多信息,请参阅 Ray 文档中的架构白皮书
问题领域:Amazon S3 访问权限
检查作业运行的失败消息。如果这不能提供足够的信息,请检查 /aws-glue/ray/jobs/script-log/
。
问题领域:PIP 依赖关系管理
检查 /aws-glue/ray/jobs/ray-runtime-env-log/
。
问题领域:检查主进程中的中间值
向主脚本写入 stderr
或从主脚本写出 stdout
,然后从 /aws-glue/ray/jobs/script-log/
中检索日志。
问题领域:检查子进程中的中间值
从 remote
函数写入 stderr
或写出 stdout
。然后,从 /aws-glue/ray/jobs/ray-worker-out-logs/
或 /aws-glue/ray/jobs/ray-worker-err-logs/
检索日志。您的函数可能已在任何副本上运行,因此您可能需要检查多个日志才能找到预期的输出。
问题领域:解释错误消息中的 IP 地址
在某些错误情况下,您的作业可能会发出包含 IP 地址的错误消息。这些 IP 地址是临时性的,供集群用来识别节点并在节点之间进行通信。根据 IP 地址,节点的日志将发布到带有唯一后缀的日志流。
在 CloudWatch 中,您可以通过识别此后缀来筛选日志,以检查特定于此 IP 地址的日志。例如,给定 FAILED_IP
和 JOB_RUN_ID
,您可以用以下方式标识后缀:
filter @logStream like /
JOB_RUN_ID
/ | filter @message like /IP-/ | parse @message "IP-[*]" as ip | filter ip like /FAILED_IP
/ | fields replace(ip, ":", "_") as uIP | stats count_distinct by uIP as logStreamSuffix | display logStreamSuffix