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

上次更新时间:2019 年 11 月 21 日

我的 AWS Glue 作业因为以下 "Exit status: -100.Diagnostics: Container released on a *lost* node" 错误而失败。

解决方法

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

添加更多数据处理单元 (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 控制台:在配置作业属性页面的安全配置、脚本库和作业参数(可选)下方,为工作程序类型选择不同的选项。

这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助吗?