AWS Glue 爬网程序因内部服务异常而失败
上次更新时间:2020 年 8 月 28 日
如何防止 AWS Glue 爬网程序因“ERROR : Internal Service Exception”而失败?
解决方法
爬网程序内部服务异常有时是由暂时性问题造成。在开始进行问题排查之前,请再次运行爬网程序。如果您仍然遇到内部服务异常,请检查以下常见问题:
AWS Glue 数据目录
确保列名称不超过 255 个字符,且不包含特殊字符。有关列要求的更多信息,请参阅列。检查格式错误的数据。例如,如果列名称不符合正则表达式模式“”,则爬网程序无法运行。 检查长度为 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://awsdoc-example-bucket/yyyy=xxxx/mm=xxx/dd=xx/,但有些对象却使用路径 s3://awsdoc-example-bucket/yyyy=xxxx/mm=xxx/,则爬网程序会因内部服务异常而失败。Amazon DynamoDB
确保表有足够的读取容量单位。 确保您用于运行爬网程序的 IAM 角色拥有 dynamodb:Scan 权限。有关更多信息,请参阅 DynamoDB API 权限:操作、资源和条件参考。 确保表名称不包含空格字符。JDBC
如果您正在爬取使用 AWS KMS 加密的 JDBC 数据源,请检查您用于连接的子网。子网的路由表必须具有通过 AWS KMS VPC 终端节点或 NAT 网关指向 KMS 终端节点的路由。 确保您使用的是正确的包含路径语法。有关更多信息,请参阅定义爬网程序。 如果您正在爬取 JDBC 数据存储,请确认 SSL 连接已正确配置。如果您使用的不是 SSL 连接,请确保您在配置爬网程序时未选中需要使用 SSL 连接。 确认 AWS Glue 连接中的数据库名称与爬网程序的包含路径中的数据库名称匹配,并且确保您正确输入了包含路径。有关详细信息,请参阅包含模式和排除模式。AWS KMS
如果您在使用 AWS KMS,则 AWS Glue 爬网程序必须有权访问 AWS KMS。要授予访问权限,请在创建 KMS 终端节点时选中启用私有 DNS 名称。然后,将 KMS 终端节点添加到 AWS Glue 连接的 VPC 子网配置。有关更多信息,请参阅创建 AWS KMS VPC 终端节点(VPC 控制台)。