为什么我的 AWS Glue 爬网程序会因内部服务异常而失败?

2 分钟阅读
0

我的 AWS Glue 爬网程序失败并显示错误“ERROR : Internal Service Exception(错误:内部服务异常)”。

解决方法

爬网程序内部服务异常可能是由暂时性问题造成。在开始进行问题排查之前,请再次运行爬网程序。如果您仍然遇到内部服务异常,请检查以下常见问题。

数据问题

如果您的 AWS Glue 爬网程序配置为处理大量数据,则该爬网程序可能会面临内部服务异常。查看出现数据问题的原因以进行修复:

  • 如果您有大量小文件,那么爬网程序可能会因内部服务异常而失败。为避免此问题,请使用 S3DistCp 工具合并较小的文件。当您使用 S3DistCp 时,会产生额外的 Amazon EMR 费用。或者,您可以设置排除模式,然后反复爬取文件。最后,考虑开启采样以避免扫描前缀内的所有文件。
  • 如果您的爬网程序接近 24 小时超时值,请拆分工作流以防止出现内存问题。有关更多信息,请参阅 AWS Glue 爬网程序为什么运行很长时间?

注意:解决数据规模问题的最佳方法是减少处理的数据量。

Amazon Simple Storage Service(Amazon S3)文件夹结构不一致

随时间变化,您的 AWS Glue 爬网程序会遇到特定格式的数据。但是,上游应用程序中的不一致可能会触发内部服务异常错误

数据目录中的表分区定义与 Amazon S3 中的 Hive 分区结构之间可能存在不一致。这种差异可能会给您的爬网程序带来问题。例如,爬网程序可能希望将对象分区为 "s3://awsdoc-example-bucket/yyyy=xxxx/mm=xxx/dd=xx/[files]"。但是假设其中一些对象变为 "s3://awsdoc-example-bucket/yyyy=xxxx/mm=xxx/[files]"。发生这种情况时,爬网程序会失败并引发内部服务异常错误。

如果您修改先前爬取的数据位置,则可能会出现内部服务异常错误,包含增量爬取。发生这种情况是因为满足以下条件之一:

  • 已知为空的 Amazon S3 位置已更新并填充数据文件
  • 文件已从已知填充数据文件的 Amazon S3 位置移除

如果您更改 Amazon S3 前缀结构,则会触发此异常。

如果您认为 S3 数据存储发生更改,则最佳做法是删除当前的爬网程序。删除当前爬网程序后,使用爬取所有文件夹选项在同一 S3 目标上创建新的爬网程序。

AWS Key Management Service(AWS KMS)问题

如果您的数据存储配置了 AWS KMS 加密,请检查以下内容:

  • 确认爬网程序的 AWS Identity and Access Management(IAM)角色具有访问 AWS KMS 密钥的权限。
  • 确认您的 AWS KMS 密钥策略以正确的方式委派权限。
  • 确认 AWS KMS 密钥仍然存在且处于可用状态。如果其 AWS KMS 密钥待删除,则会触发内部服务异常。

有关更多信息,请参阅在 AWS Glue 控制台上处理安全配置在 AWS Glue 中设置加密

AWS Glue Data Catalog 问题

如果您的数据目录有大量列或嵌套结构,则架构大小可能会超过 400KB 的限制。要解决与数据目录相关的异常,请检查以下内容:

  • 确保列名称长度不超过 255 个字符,且不包含特殊字符。有关列要求的更多信息,请参阅
  • 检查长度为 0 的列。如果源数据中的列与数据目录表的数据格式不匹配,就会发生这种情况。
  • 在表的架构定义中,确保每列的类型值不超过 131072 个字节。如果超过此限制,您的爬网程序可能会面临内部服务异常。有关详细信息,请参阅列结构
  • 检查格式错误的数据。例如,如果列名称不符合正则表达式模式 "[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\t]",则爬网程序无法运行。
  • 如果您的数据包含(精度、标度)格式的 DECIMAL 列,请确保标度值小于或等于精度值。
  • 您的爬网程序可能会失败,显示“Unable to create table in Catalog(无法在目录中创建表)”或“Payload size of request exceeded limit(请求的负载大小超出限制)”错误消息。发生这种情况时,请监控表架构定义的大小。对数据目录中表的列数没有限制。但是,架构的总大小有 400KB 的限制。大量列导致架构总大小超出 400KB 的限制。潜在的解决方法包括将架构分成多个表并删除不必要的列。您也可以考虑通过减少列名称来减小元数据的大小。

Amazon S3 问题

  • 确保 Amazon S3 路径不包含特殊字符。
  • 确认适用于爬网程序的 IAM 角色有访问 Amazon S3 路径的权限。有关更多信息,请参阅为 AWS Glue 创建 IAM 角色
  • 如果可能,请从您的数据中删除特殊的 ASCII 字符,例如 ^、%、~。或者使用自定义分类器对您的数据进行分类。
  • 确认 S3 对象使用 STANDARD 存储类。要将对象还原到 STANDANDER 存储类,请参阅还原归档对象
  • 确认爬网程序配置中的包含模式和排除模式与 S3 存储桶路径匹配。
  • 如果您正在爬取加密的 S3 存储桶,那么请确认爬网程序的 IAM 角色拥有 AWS KMS 密钥的适当权限。有关更多信息,请参阅在 AWS Glue 控制台上处理安全配置在 AWS Glue 中设置加密
  • 如果您正在爬取加密的 S3 存储桶,请确保该存储桶、AWS KMS 密钥和 AWS Glue 作业位于同一 AWS 区域。
  • 检查您所爬取的 S3 存储桶上的请求速率。如果速率较高,请考虑创建更多前缀以进行并行读取。有关更多信息,请参阅最佳实践设计模式:优化 Amazon S3 性能
  • 确保 S3 资源路径长度少于 700 个字符。

Amazon DynamoDB 问题

JDBC 问题

  • 如果您正在爬取使用 AWS KMS 加密的 JDBC 数据来源,那么请检查您用于连接的子网。子网的路由表必须有指向 AWS KMS 端点的路由。此路由可以通过支持 AWS KMS 的虚拟私有云(VPC)端点NAT 网关
  • 确保您使用的是正确的包含路径语法。有关更多信息,请参阅定义爬网程序
  • 如果您正在爬取 JDBC 数据存储,那么请确认 SSL 连接已正确配置。如果您使用的不是 SSL 连接,那么请确保您在配置爬网程序时未选中 Require SSL connection(需要使用 SSL 连接)。
  • 确认 AWS Glue 连接中的数据库名称与爬网程序的包含路径中的数据库名称匹配。此外,请确保您正确输入了包含路径。有关详细信息,请参阅包含模式和排除模式
  • 确保您使用的子网位于 AWS Glue 支持的可用区内。
  • 确保您使用的子网具有足够的可用私有 IP 地址。
  • 确认内置的 AWS Glue JDBC 驱动程序支持 JDBC 数据来源。

使用 VPC 端点时出现 AWS KMS 问题

  • 如果您在使用 AWS KMS,那么 AWS Glue 爬网程序必须有权访问 AWS KMS。要授予访问权限,请在创建 AWS KMS 终端节点时选中 Enable Private DNS Name(启用私有 DNS 名称)。然后,将 AWS KMS 端点添加到 AWS Glue 连接的 VPC 子网配置。有关更多信息,请参阅通过 VPC 端点连接到 AWS KMS

相关信息

在 AWS Glue 控制台上使用爬网程序

加密爬网程序、作业和开发终端节点写入的数据

AWS 官方
AWS 官方已更新 1 年前
没有评论