对日志中的 Amazon Glue for Ray 错误进行故障排除 - Amazon Glue
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

对日志中的 Amazon Glue for Ray 错误进行故障排除

Amazon Glue 提供对作业运行期间由 Ray 进程发出的日志的访问权限。如果您在 Ray 作业中遇到错误或意外行为,请先从日志中收集信息以确定失败原因。我们还为交互式会话提供类似的日志。会话日志以 /aws-glue/ray/sessions 前缀提供。

当您的作业运行时,日志行会实时发送到 CloudWatch。运行完成后,打印语句会附加到 CloudWatch 日志中。作业运行后,日志将保留两周。

检查 Ray 作业日志

当作业失败时,收集您的作业名称和作业运行 ID。您可以在 Amazon 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 架构的背景信息。

在 Amazon Glue ETL 中,工作线程对应于一个实例。当您为某项 Amazon 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_IPJOB_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