为什么我的 AWS Glue 任务因为“Exit status: -100.Diagnostics: Container released on a *lost* node”错误而失败?

2 分钟阅读
0

我的 AWS Glue 1.0 或 0.9 任务因为以下错误而失败:“Exit status: -100.Diagnostics: Container released on a lost node”。

解决方法

如果您的数据来源为 JDBC,请参阅为什么当我将一个大型数据集从 Amazon RDS 迁移到 Amazon S3 时,我的 AWS Glue 作业会因节点丢失而失败? 如果您的数据来源是 Amazon Simple Storage Service(Amazon S3),使用以下一种或多种方法来解决节点丢失错误。

**注意:**如果在运行 AWS CLI 命令时遇到错误,请确保您使用的是最新版本的 AWS CLI

添加更多数据处理单元 (DPU)

在默认情况下,AWS Glue 任务有 10 个 DPU,而且采用标准工作程序类型。预留一个 DPU 用于应用程序主控器。在添加更多 DPU 前,考虑以下事项:

  • 添加更多 DPU 仅在作业工作负载并行化时有帮助。如果您未对数据进行正确分区,数据不会分发到新节点,而且您将收到节点丢失的错误消息。如需更多信息,请参阅确定最佳 DPU 容量
  • 在某些情况下,大型文件可能在一个节点上使用过多资源,从而降低任务工作负载并行化的有效性。为减少此错误,确保此类大型文件采用可拆分的格式。如需更多信息,请参阅使用 AWS Glue 扩展 Apache Spark 任务和对数据进行分区的最佳实践
  • 任务运行的时间越长,其写入磁盘的日志就越多。如果日志导致磁盘空间问题,添加更多 DPU 也无济于事。在某些情况下,节点丢失错误由日志记录过多和磁盘溢出同时导致。
  • 查看日志和 glue.ALL.jvm.heap.usage Amazon CloudWatch 指标以确定占用内存的执行程序。如果部分执行程序比其他执行程序占用更多内存,数据偏斜可能会导致该错误。

使用作业 APIAWS 命令行界面 (AWS CLI)AWS Glue 控制台,以便在创建作业时添加更多 DPU:

  • 作业 API:在运行 CreateJob 操作时设置 NumberOfWorkers 属性。
  • AWS CLI:在运行 create-job 命令时设置 number-of-workers 属性。
  • AWS Glue 控制台:在配置作业属性页面的安全配置、脚本库和作业参数(可选)下方,增加最大容量的值。它是该作业的 DPU 的数量。

确保为该任务启用 CloudWatch 指标。这些指标可帮助您监控任务性能,以及确定您是否必须添加更多 DPU。使用任务 APIAWS CLI,或 AWS Glue 控制台,以便为新的或现有的任务启用指标:

  • 作业 API:在定义 CreateJobUpdateJob 操作中的 DefaultArguments 时,使用 --enable-metrics 参数。
  • AWS CLI:使用 -enable-metrics 参数
  • AWS Glue 控制台:在监控选项的下方,将任务指标设置为已启用

更改 DPU 工作程序类型

根据您的数据集的大小,标准工作程序类型可能没有足够资源来防止 Spark 应用程序引起内存不足和溢出到磁盘。要解决此问题,选择拥有更多可用资源的工作程序类型:

  • **标准 (默认):**每个工作程序映射到 1 个 DPU (4 个 vCPU,16 GB 内存),并且拥有 50 GB 磁盘空间。
  • **G.1X:**每个工作程序映射到 1 个 DPU (4 个 vCPU,16 GB 内存),并且拥有 64 GB 磁盘空间。
  • **G.2X:**每个工作程序映射到 2 个 DPU (8 个 vCPU,32 GB 内存),并且拥有 128 GB 磁盘空间。

使用作业 APIAWS CLIAWS Glue 控制台,以便在创建作业时更改工作程序类型:

  • 作业 API:在运行 CreateJob 操作时设置 WorkerType 属性。
  • AWS CLI:在运行 create-job 命令时设置 worker-type 属性。
  • AWS Glue 控制台:在配置作业属性页面的安全配置、脚本库和任务参数 (可选) 下方,为工作程序类型选择不同的选项。

相关信息

在 AWS Glue 中添加任务

AWS 官方
AWS 官方已更新 3 年前