View a markdown version of this page

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

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

重要

Amazon Glue for Ray 不再向新客户开放。现有客户可以继续正常使用该服务。有关更多信息,请参阅 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