AWS Glue 爬网程序因内部服务异常而失败

上次更新时间:2019 年 9 月 24 日

如何防止 AWS Glue 爬网程序因“ERROR : Internal Service Exception”而失败?

解决方法

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

AWS Glue 数据目录

  • 确保列名称不超过 255 个字符,且不包含特殊字符。有关列要求的更多信息,请参阅
  • 检查格式错误的数据。例如,如果列名称不符合正则表达式模式“[\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\t]”,则爬网程序无法运行。
  • 检查长度为 0 的列。如果数据中的列与表的数据格式不匹配,则列的长度会为 0。
  • 如果您的数据包含“(precision, scale)”格式的 DECIMAL 列,请确保刻度值小于或等于精度值。

Amazon Simple Storage Service (Amazon S3)

  • 确保 Amazon S3 路径不包含特殊字符。
  • 确认适用于爬网程序的 AWS Identity and Access Management (IAM) 角色有权访问 Amazon S3 路径。有关更多信息,请参阅为 AWS Glue 创建 IAM 角色
  • 大量小文件可能会导致爬网程序因内部服务异常而失败。为避免此问题,请使用 S3DistCp 工具合并较小的文件。当您使用 S3DistCp 时,会产生额外的 Amazon EMR 费用。或者,设置排除模式,然后批量爬取文件。
  • 如果可能,请从您的数据中删除特殊的 ASCII 字符,例如 ^、% 和 ~。如果无法执行以上操作,请使用自定义分类器对您的数据进行分类。
  • 确认 S3 对象使用 STANDARD 存储类。要将对象还原到 STANDARD 存储类,请参阅如何还原已存档的 S3 对象?
  • 确认爬网程序配置中的包含模式和排除模式与 S3 存储桶路径匹配。
  • 如果您正在爬取加密的 S3 存储桶,请确认爬网程序的 IAM 角色拥有 AWS Key Management Service (AWS KMS) 密钥的适当权限。有关更多信息,请参阅在 AWS Glue 控制台上处理安全配置在 AWS Glue 中设置加密
  • 如果您正在爬取加密的 S3 存储桶,请确保该存储桶、KMS 密钥和 AWS Glue 作业位于同一 AWS 区域。
  • 检查您所爬取的 S3 存储桶上的请求速率。如果速率较高,请考虑创建更多前缀以进行并行读取。有关更多信息,请参阅最佳实践设计模式:优化 Amazon S3 性能
  • 确保 S3 存储桶分区与密钥保持一致。例如,如果爬网程序期望对象使用路径 s3://mybucket/yyyy=xxxx/mm=xxx/dd=xx/[files],但有些对象却使用路径 s3://mybucket/yyyy=xxxx/mm=xxx/[files],则爬网程序会因内部服务异常而失败。

Amazon DynamoDB

JDBC

  • 如果您正在爬取使用 AWS KMS 加密的 JDBC 数据源,请检查您用于连接的子网。子网的路由表必须有指向 KMS 终端节点的路由。
  • 确保您使用的是正确的包含路径语法。有关更多信息,请参阅定义爬网程序
  • 如果您正在爬取 JDBC 数据存储,请确认 SSL 连接已正确配置。如果您使用的不是 SSL 连接,请确保您在配置爬网程序时未选中需要使用 SSL 连接
  • 确认 AWS Glue 连接中的数据库名称与爬网程序的包含路径中的数据库名称匹配,并且确保您正确输入了包含路径。有关更多信息,请参阅在 AWS Glue 控制台上处理连接以及包含模式和排除模式

AWS KMS

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