

# 排除 AWS Glue 问题
<a name="troubleshooting-glue"></a>

 如果您在使用 AWS Glue 时遇到问题，请查询本部分中的相关主题。


|  | 
| --- |
|  有关 AWS Glue 中的 Apache Spark 故障排除，请参阅 [AWS Glue 中 Apache Spark 的生成式人工智能故障排除](https://docs.aws.amazon.com/glue/latest/dg/troubleshoot-spark.html)，其中提供了人工智能驱动的帮助来诊断和解决 Spark 作业问题。 使用我们人工智能驱动的故障排除代理改变 Apache Spark 故障排除，该代理现在支持所有主要的部署模式，包括 AWS Glue、Amazon EMR-EC2、Amazon EMR-Serverless 和 Amazon SageMaker AI 笔记本。这款强大的代理通过将自然语言交互、实时工作负载分析和智能代码建议整合到无缝体验中，从而消除了复杂的调试过程。有关实施详细信息，请参阅[什么是适用于 Amazon EMR 的 Apache Spark 故障排除代理](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/spark-troubleshoot.html)。  | 

**Topics**
+ [收集 AWS Glue 故障诊断信息](troubleshooting-contact-support.md)
+ [Glue 常见设置错误故障排除](glue-troubleshooting-errors.md)
+ [爬网程序使用 Lake Formation 权限时出现爬网程序错误](error-crawler-config-lf.md)
+ [对日志中的 AWS Glue for Ray 错误进行故障排除](troubleshooting-ray.md)
+ [AWS Glue 机器学习异常](exceptions-machine-learning.md)
+ [AWS Glue 限额](troubleshooting-service-limits.md)

# 收集 AWS Glue 故障诊断信息
<a name="troubleshooting-contact-support"></a>

如果在 AWS Glue 中遇到错误或意外行为，并且需要与 AWS 支持 联系，则应首先收集与失败操作关联的名称、ID 和日志的信息。有了这些信息，支持 可以帮助您解决您遇到的问题。

除了您的 *account ID*，还收集以下每种故障类型的信息：

**当爬网程序失败时，请收集以下信息：**  
+ 爬网程序名称

  爬网程序运行的日志位于 CloudWatch Logs 中的 `/aws-glue/crawlers` 下面。

**当测试连接失败时，请收集以下信息：**  
+ 连接名称
+ 连接 ID
+ 采用 `jdbc:protocol://host:port/database-name` 形式的 JDBC 连接字符串。

  测试连接的日志位于 CloudWatch Logs 中的 ` /aws-glue/testconnection` 下面。

**当作业失败时，请收集以下信息：**  
+ 任务名称 
+ 采用 `jr_xxxxx` 形式的作业运行 ID。

  任务运行的日志位于 CloudWatch Logs 中的 ` /aws-glue/jobs` 下面。

# Glue 常见设置错误故障排除
<a name="glue-troubleshooting-errors"></a>

如果您在 AWS Glue 中遇到错误，可以使用以下信息来帮助您查找问题的根源并解决问题。

**注意**  
 AWS Glue GitHub 存储库中的 [AWS Glue 常见问题](https://github.com/aws-samples/aws-glue-samples/blob/master/FAQ_and_How_to.md)部分包含了额外的问题排查指南。

**Topics**
+ [错误：资源不可用](#error-resource-unavailable)
+ [错误：在 VPC 中找不到 subnetId 的 S3 终端节点或 NAT 网关](#error-s3-subnet-vpc-NAT-configuration)
+ [错误：需要安全组中的入站规则](#error-inbound-self-reference-rule)
+ [错误：需要安全组中的出站规则](#error-outbound-self-reference-rule)
+ [错误：作业运行失败，因为应该向传递的角色授予针对 AWS Glue 服务的代入角色权限](#error-assume-role-user-policy)
+ [错误：DescribeVpcEndpoints 操作未经授权。无法验证 VPC ID vpc-id](#error-DescribeVpcEndpoints-permission)
+ [错误：DescribeRouteTables 操作未经授权。无法验证 VPC ID: vpc-id 中的 subnet id: Subnet-id](#error-DescribeRouteTables-permission)
+ [错误：无法调用 ec2:DescribeSubnets](#error-DescribeSubnets-permission)
+ [错误：无法调用 ec2:DescribeSecurityGroups](#error-DescribeSecurityGroups-permission)
+ [错误：找不到可用区的子网](#error-az-not-available)
+ [错误：对 JDBC 目标进行写入时发生作业运行异常](#error-job-run-jdbc-target)
+ [错误：Amazon S3：此操作对该对象的存储类无效](#error-s3-operation-not-valid)
+ [错误：Amazon S3 超时](#error-s3-timeout)
+ [错误：Amazon S3 访问被拒绝](#error-s3-access-denied)
+ [错误：Amazon S3 访问密钥 ID 不存在](#error-s3-accesskeyid-not-found)
+ [错误：作业在访问带有 `s3a://` URI 的 Amazon S3 时运行失败](#error-s3a-uri-directory-listing)
+ [错误：Amazon S3 服务令牌已过期](#error-s3-service-token-expired)
+ [错误：找不到网络接口的私有 DNS](#error-no-private-DNS)
+ [错误：开发终端节点预置失败](#error-development-endpoint-failed)
+ [错误：笔记本服务器 CREATE\$1FAILED](#error-notebook-server-ec2-instance-profile)
+ [错误：本地笔记本无法启动](#error-local-notebook-fails-to-start)
+ [错误：运行爬网程序失败](#error-running-crawler-failed)
+ [错误：分区未更新](#error-update-from-job-partitions)
+ [错误：由于版本不匹配，作业书签更新失败](#error-job-bookmarks-limitation)
+ [错误：启用作业书签后，作业正在重新处理数据](#error-job-bookmarks-reprocess-data)
+ [错误：AWS Glue 中 VPC 之间的失效转移行为](#vpc-failover-behavior-error-10)

## 错误：资源不可用
<a name="error-resource-unavailable"></a>

如果 AWS Glue 返回了“资源不可用”消息，则可查看错误消息或日志来帮助您详细了解问题。以下作业描述了故障排除的通用方法。
+ 对于您使用的任何连接和开发终端节点，请检查您的集群是否未用尽弹性网络接口。

## 错误：在 VPC 中找不到 subnetId 的 S3 终端节点或 NAT 网关
<a name="error-s3-subnet-vpc-NAT-configuration"></a>

检查消息中的子网 ID 和 VPC ID 可帮助您诊断问题。
+ 检查您是否设置了 AWS Glue 需要的 Amazon S3 VPC 终端节点。此外，请检查您的 NAT 网关 (如果它是您的配置的一部分)。有关更多信息，请参阅 [适用于 Amazon S3 的 Amazon VPC 终端节点](vpc-endpoints-s3.md)。

## 错误：需要安全组中的入站规则
<a name="error-inbound-self-reference-rule"></a>

至少有一个安全组必须打开所有入口端口。为限制流量，入站规则中的源安全组可限制为同一安全组。
+ 对于您使用的任何连接，请检查安全组中是否有属于自引用的入站规则。有关更多信息，请参阅 [设置对数据存储的网络访问](start-connecting.md)。
+ 如果您使用的是开发终端节点，请检查安全组中是否有属于自引用的入站规则。有关更多信息，请参阅 [设置对数据存储的网络访问](start-connecting.md)。

## 错误：需要安全组中的出站规则
<a name="error-outbound-self-reference-rule"></a>

至少有一个安全组必须打开所有出口端口。为限制流量，出站规则中的源安全组可限制为同一安全组。
+ 对于您使用的任何连接，请检查安全组中是否有属于自引用的出站规则。有关更多信息，请参阅 [设置对数据存储的网络访问](start-connecting.md)。
+ 如果您使用的是开发终端节点，请检查安全组中是否有属于自引用的出站规则。有关更多信息，请参阅 [设置对数据存储的网络访问](start-connecting.md)。

## 错误：作业运行失败，因为应该向传递的角色授予针对 AWS Glue 服务的代入角色权限
<a name="error-assume-role-user-policy"></a>

定义作业的用户必须具有针对适用于 AWS Glue 的 `iam:PassRole` 的权限。
+ 当某个用户创建 AWS Glue 任务时，请确认该用户的角色包含一个策略，其中包含适用于 AWS Glue 的 `iam:PassRole`。有关更多信息，请参阅 [步骤 3：将策略附加到访问 AWS Glue 的用户或组](attach-policy-iam-user.md)。

## 错误：DescribeVpcEndpoints 操作未经授权。无法验证 VPC ID vpc-id
<a name="error-DescribeVpcEndpoints-permission"></a>
+ 检查传递到 AWS Glue 的策略是否有 `ec2:DescribeVpcEndpoints` 权限。

## 错误：DescribeRouteTables 操作未经授权。无法验证 VPC ID: vpc-id 中的 subnet id: Subnet-id
<a name="error-DescribeRouteTables-permission"></a>
+ 检查传递到 AWS Glue 的策略是否有 `ec2:DescribeRouteTables` 权限。

## 错误：无法调用 ec2:DescribeSubnets
<a name="error-DescribeSubnets-permission"></a>
+ 检查传递到 AWS Glue 的策略是否有 `ec2:DescribeSubnets` 权限。

## 错误：无法调用 ec2:DescribeSecurityGroups
<a name="error-DescribeSecurityGroups-permission"></a>
+ 检查传递到 AWS Glue 的策略是否有 ` ec2:DescribeSecurityGroups` 权限。

## 错误：找不到可用区的子网
<a name="error-az-not-available"></a>
+ 可用区可能对 AWS Glue 不可用。请在不同于消息中指定的可用区的可用区中创建和使用新子网。

## 错误：对 JDBC 目标进行写入时发生作业运行异常
<a name="error-job-run-jdbc-target"></a>

当您运行某个对 JDBC 目标进行写入的作业时，该作业在以下情况下可能遇到错误：
+ 如果您的作业对 Microsoft SQL Server 表进行写入，而该表具有定义为 `Boolean` 类型的列，则必须在 SQL Server 数据库中预定义该表。当您通过 **Create tables in your data target (在数据目标中创建表)** 选项来使用 SQL Server 目标在 AWS Glue 控制台上定义任务时，请勿将任何源列映射到数据类型为 `Boolean` 的目标列。您可能在作业运行时遇到错误。

  您可以通过执行以下操作来避免错误：
  + 选择包含 **Boolean** 列的现有表。
  + 编辑 `ApplyMapping` 转换并将源中的 **Boolean** 列映射到目标中的数字或字符串。
  + 编辑 `ApplyMapping` 转换以从源中删除 **Boolean** 列。
+ 如果您的作业对 Oracle 表进行写入，您可能需要调整 Oracle 对象的名称长度。在某些版本的 Oracle 中，最大标识符长度限制为 30 个字节或 128 个字节。此限制影响 Oracle 目标数据存储的表名称和列名称。

  您可以通过执行以下操作来避免错误：
  + 在您的版本的限制内为 Oracle 目标表命名。
  + 默认列名称从数据中的字段名称生成。要应对列名称长度超过限制的情况，请使用 `ApplyMapping` 或 `RenameField` 转换将列的名称更改得不超过限制。

## 错误：Amazon S3：此操作对该对象的存储类无效
<a name="error-s3-operation-not-valid"></a>

如果 AWS Glue 返回此错误，则说明 AWS Glue 作业可能正在从跨 Amazon S3 存储类层级进行分区的表中读取数据。
+ 通过使用存储类排除，您可以确保您的 AWS Glue 作业可以在具有跨这些存储类层的分区的表上工作。如果没有排除项，则从这些层读取数据的作业将会失败，并显示以下错误：`AmazonS3Exception: The operation is not valid for the object's storage class`。

  有关更多信息，请参阅 [排除 Amazon S3 存储类](aws-glue-programming-etl-storage-classes.md)。

## 错误：Amazon S3 超时
<a name="error-s3-timeout"></a>

如果 AWS Glue 返回连接超时错误，则可能是因为它正在尝试访问其他 AWS 区域中的 Amazon S3 存储桶。
+ Amazon S3 VPC 终端节点只能将流量路由到 AWS 区域中的存储桶。如果您需要连接到其他区域中的存储桶，一种可能的解决方法是使用 NAT 网关。有关更多信息，请参阅 [NAT 网关](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)。

## 错误：Amazon S3 访问被拒绝
<a name="error-s3-access-denied"></a>

如果 AWS Glue 向 Amazon S3 存储桶或对象返回了“访问被拒绝”错误，则可能是因为提供的 IAM 角色没有具有针对您的数据存储的权限的策略。
+ ETL 任务必须有权访问用作源或目标的 Amazon S3 数据存储。爬网程序必须有权访问其爬取的 Amazon S3 数据存储。有关更多信息，请参阅 [步骤 2：为 AWS Glue 创建 IAM 角色](create-an-iam-role.md)。

## 错误：Amazon S3 访问密钥 ID 不存在
<a name="error-s3-accesskeyid-not-found"></a>

如果AWS Glue 在运行作业时返回了“访问密钥 ID 不存在”错误，则可能由以下原因之一导致：
+ ETL 任务使用 IAM 角色来访问数据存储和确认您的任务的 IAM 角色在任务开始前未被删除。
+ IAM 角色包含以下权限：访问您的数据存储和确认包含 `s3:ListBucket` 的所有已附加的 Amazon S3 策略正确无误。

## 错误：作业在访问带有 `s3a://` URI 的 Amazon S3 时运行失败
<a name="error-s3a-uri-directory-listing"></a>

如果作业运行时返回一个类似*无法分析使用处理程序类的 XML 文档*的错误，可能是由于尝试列出数百个使用 ` s3a://` URI 的文件时失败。改用 `s3://` URI 访问您的数据存储。下面的异常跟踪突出显示了要查找的错误：

```
1.	com.amazonaws.SdkClientException: Failed to parse XML document with handler class com.amazonaws.services.s3.model.transform.XmlResponsesSaxParser$ListBucketHandler
2.	at com.amazonaws.services.s3.model.transform.XmlResponsesSaxParser.parseXmlInputStream(XmlResponsesSaxParser.java:161)
3.	at com.amazonaws.services.s3.model.transform.XmlResponsesSaxParser.parseListBucketObjectsResponse(XmlResponsesSaxParser.java:317)
4.	at com.amazonaws.services.s3.model.transform.Unmarshallers$ListObjectsUnmarshaller.unmarshall(Unmarshallers.java:70)
5.	at com.amazonaws.services.s3.model.transform.Unmarshallers$ListObjectsUnmarshaller.unmarshall(Unmarshallers.java:59)
6.	at com.amazonaws.services.s3.internal.S3XmlResponseHandler.handle(S3XmlResponseHandler.java:62)
7.	at com.amazonaws.services.s3.internal.S3XmlResponseHandler.handle(S3XmlResponseHandler.java:31)
8.	at com.amazonaws.http.response.AwsResponseHandlerAdapter.handle(AwsResponseHandlerAdapter.java:70)
9.	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleResponse(AmazonHttpClient.java:1554)
10.	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1272)
11.	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1056)
12.	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:743)
13.	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:717)
14.	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:699)
15.	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:667)
16.	at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:649)
17.	at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:513)
18.	at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4325)
19.	at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4272)
20.	at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4266)
21.	at com.amazonaws.services.s3.AmazonS3Client.listObjects(AmazonS3Client.java:834)
22.	at org.apache.hadoop.fs.s3a.S3AFileSystem.getFileStatus(S3AFileSystem.java:971)
23.	at org.apache.hadoop.fs.s3a.S3AFileSystem.deleteUnnecessaryFakeDirectories(S3AFileSystem.java:1155)
24.	at org.apache.hadoop.fs.s3a.S3AFileSystem.finishedWrite(S3AFileSystem.java:1144)
25.	at org.apache.hadoop.fs.s3a.S3AOutputStream.close(S3AOutputStream.java:142)
26.	at org.apache.hadoop.fs.FSDataOutputStream$PositionCache.close(FSDataOutputStream.java:74)
27.	at org.apache.hadoop.fs.FSDataOutputStream.close(FSDataOutputStream.java:108)
28.	at org.apache.parquet.hadoop.ParquetFileWriter.end(ParquetFileWriter.java:467)
29.	at org.apache.parquet.hadoop.InternalParquetRecordWriter.close(InternalParquetRecordWriter.java:117)
30.	at org.apache.parquet.hadoop.ParquetRecordWriter.close(ParquetRecordWriter.java:112)
31.	at org.apache.spark.sql.execution.datasources.parquet.ParquetOutputWriter.close(ParquetOutputWriter.scala:44)
32.	at org.apache.spark.sql.execution.datasources.FileFormatWriter$SingleDirectoryWriteTask.releaseResources(FileFormatWriter.scala:252)
33.	at org.apache.spark.sql.execution.datasources.FileFormatWriter$$anonfun$org$apache$spark$sql$execution$datasources$FileFormatWriter$$executeTask$3.apply(FileFormatWriter.scala:191)
34.	at org.apache.spark.sql.execution.datasources.FileFormatWriter$$anonfun$org$apache$spark$sql$execution$datasources$FileFormatWriter$$executeTask$3.apply(FileFormatWriter.scala:188)
35.	at org.apache.spark.util.Utils$.tryWithSafeFinallyAndFailureCallbacks(Utils.scala:1341)
36.	at org.apache.spark.sql.execution.datasources.FileFormatWriter$.org$apache$spark$sql$execution$datasources$FileFormatWriter$$executeTask(FileFormatWriter.scala:193)
37.	at org.apache.spark.sql.execution.datasources.FileFormatWriter$$anonfun$write$1$$anonfun$3.apply(FileFormatWriter.scala:129)
38.	at org.apache.spark.sql.execution.datasources.FileFormatWriter$$anonfun$write$1$$anonfun$3.apply(FileFormatWriter.scala:128)
39.	at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:87)
40.	at org.apache.spark.scheduler.Task.run(Task.scala:99)
41.	at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:282)
42.	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
43.	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
44.	at java.lang.Thread.run(Thread.java:748)
```

## 错误：Amazon S3 服务令牌已过期
<a name="error-s3-service-token-expired"></a>

在将数据移入和移出 Amazon Redshift 时，使用了将在 1 小时后过期的临时 Amazon S3 凭证。如果您有长时间运行的作业，它可能会失败。有关如何设置您的长时间运行的任务以将数据移入和移出 Amazon Redshift 的信息，请参阅[aws-glue-programming-etl-connect-redshift-home](aws-glue-programming-etl-connect-redshift-home)。

## 错误：找不到网络接口的私有 DNS
<a name="error-no-private-DNS"></a>

如果作业失败或开发终端节点无法预置，则可能是因为网络设置有问题。
+ 如果您使用的是 Amazon 提供的 DNS，则值 `enableDnsHostnames` 必须设置为 true。有关更多信息，请参阅 [DNS](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html)。

## 错误：开发终端节点预置失败
<a name="error-development-endpoint-failed"></a>

如果 AWS Glue 无法成功预置开发终端节点，则可能是因为网络设置有问题。
+ 当您定义开发终端节点时，系统将验证 VPC、子网和安全组以确认它们是否满足特定要求。
+ 如果您提供了可选的 SSH 公有密钥，请检查它是否为有效的 SSH 公有密钥。
+ 在 VPC 控制台中检查您的 VPC 是否使用了有效的 **DHCP 选项集**。有关更多信息，请参阅 [DHCP 选项集](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html)。
+ 如果集群仍处于 PROVISIONING 状态，请联系 AWS 支持。

## 错误：笔记本服务器 CREATE\$1FAILED
<a name="error-notebook-server-ec2-instance-profile"></a>

如果 AWS Glue 无法为开发终端节点创建笔记本服务器，则可能由以下问题之一导致：
+ AWS Glue 在设置笔记本服务器时会将一个 IAM 角色传递到 Amazon EC2。该 IAM 角色必须与 Amazon EC2 具有信任关系。
+ 该 IAM 角色必须具有同名的实例配置文件。当您使用 IAM 控制台为 Amazon EC2 创建角色时，将自动创建与该角色同名的实例配置文件。请在日志中检查与无效的实例配置文件名称 ` iamInstanceProfile.name` 有关的错误。有关更多信息，请参阅[使用实例配置文件](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html)。
+ 检查您的角色是否有权访问您传递的用来创建笔记本服务器的策略中的 `aws-glue*` 存储桶。

## 错误：本地笔记本无法启动
<a name="error-local-notebook-fails-to-start"></a>

如果您的本地笔记本无法启动并报告“找不到某个目录或文件夹”错误，则可能由以下问题之一导致：
+ 如果您是在 Microsoft Windows 上运行，请确保 `JAVA_HOME` 环境变量指向正确的 Java 目录。您可以在不更新此变量的情况下更新 Java，而如果它指向的文件夹不再存在，Jupyter Notebook 将无法启动。

## 错误：运行爬网程序失败
<a name="error-running-crawler-failed"></a>

如果 AWS Glue 无法成功运行爬网程序以便为您的数据编制目录，则可能由以下原因之一导致。首先检查 AWS Glue 控制台爬网程序列表中是否列出了错误。检查爬网程序名称旁边是否有 感叹号图标，并将鼠标指针悬停在该图标上以查看任何相关消息。
+ 在 CloudWatch Logs 中的 `/aws-glue/crawlers` 下检查爬网程序运行的日志。

## 错误：分区未更新
<a name="error-update-from-job-partitions"></a>

如果您在运行 ETL 任务时未在数据目录中更新您的分区，则 CloudWatch Logs 的 `DataSink` 类中的这些日志语句可能会有所帮助：
+ “`Attempting to fast-forward updates to the Catalog - nameSpace:`”— 显示该作业试图修改哪个数据库、表和 catalogId。如果此处没有此语句，请检查 `enableUpdateCatalog` 是否设置为 true 并作为 `getSink()` 参数正确地传递到 ` additional_options` 中。
+ “`Schema change policy behavior:`”— 显示您传入的架构 ` updateBehavior` 值。
+ “`Schemas qualify (schema compare):`”– 将为 true 或 false。
+ “`Schemas qualify (case-insensitive compare):`”– 将为 true 或 false。
+ 如果两者都为 false 并且您的 `updateBehavior` 未设置为 ` UPDATE_IN_DATABASE`，则 DynamicFrame 架构必须完全相同或包含数据目录表架构中看到的列的子集。

有关更新分区的更多信息，请参阅 [使用 AWS Glue ETL 任务在 Data Catalog 中更新架构并添加新分区](update-from-job.md)。

## 错误：由于版本不匹配，作业书签更新失败
<a name="error-job-bookmarks-limitation"></a>

您可能正在尝试参数化 AWS Glue 作业，以将相同转换/逻辑应用于 Amazon S3 中的不同数据集。您想在提供的位置跟踪处理过的文件。当您在同一源存储桶上运行同一作业并同时写入相同/不同目标（并发 > 1）时，该作业将失败并显示此错误：

```
py4j.protocol.Py4JJavaError: An error occurred while callingz:com.amazonaws.services.glue.util.Job.commit.:com.amazonaws.services.gluejobexecutor.model.VersionMismatchException: Continuation update failed due to version mismatch. Expected version 2 but found version 3
```

解决方案：将并发设置为 1，或不同时运行该作业。

目前 AWS Glue 书签不支持并发作业运行，因此提交将失败。

## 错误：启用作业书签后，作业正在重新处理数据
<a name="error-job-bookmarks-reprocess-data"></a>

有些情况下，在您已启用 AWS Glue 作业书签后，您的 ETL 作业还在重新处理早期运行中已处理的数据。检查此错误的以下常见原因：

**最大并发数**  
如果将作业的最大并发运行次数设置为大于默认值 1 的值，可能会干扰作业书签。作业书签检查对象的上次修改时间以验证哪些对象需要重新处理时可能出现这种情况。有关更多信息，请参阅[在 AWS Glue 中为 Spark 作业配置作业属性](add-job.md)中的最大并发数讨论。

**缺少作业对象**  
确保您的作业运行脚本以下面的提交结束：

```
job.commit()
```

当您包含此对象时，AWS Glue 将记录作业运行的时间戳和路径。如果您使用相同路径再次运行该作业，AWS Glue 将只处理新文件。如果您未包含此对象并且已启用作业书签，该作业将重新处理已处理的文件和新文件，并在作业的目标数据存储中创建冗余。

**缺少转换上下文参数**  
转换上下文是 `GlueContext` 类中的一个可选参数，但如果不包含该参数，作业书签将不起作用。要解决此错误，请在[创建 DynamicFrame](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-pyspark-extensions-glue-context.html#aws-glue-api-crawler-pyspark-extensions-glue-context-create_dynamic_frame_from_catalog) 时添加转换上下文参数，如下所示：

```
sample_dynF=create_dynamic_frame_from_catalog(database, table_name,transformation_ctx="sample_dynF") 
```

**输入源**  
如果将关系数据库（JDBC 连接）用作输入源，则仅当表的主键按顺序排列时，作业书签才起作用。作业书签适用于新行，但不适用于更新的行。这是因为作业书签查找已存在的主键。如果您的输入源为 Amazon Simple Storage Service（Amazon S3），则这不适用。

**上次修改时间**  
对于 Amazon S3 输入源，任务书签将通过检查对象的上次修改时间而不是文件名来验证哪些对象需要重新处理。如果您的输入源数据在上次作业运行后已修改，则再次运行作业时将重新处理这些文件。

## 错误：AWS Glue 中 VPC 之间的失效转移行为
<a name="vpc-failover-behavior-error-10"></a>

在 AWS Glue 5.1 及之前版本中，以下过程用于作业的失效转移。

摘要：在提交作业运行时选择 AWS Glue 连接。如果作业运行遇到一些问题（缺少 IP 地址、与源的连接、路由问题），则作业运行将失败。如果配置了重试，则 AWS Glue 将使用相同的连接重试。

1. 对于每次运行尝试，AWS Glue 都会按照作业配置中列出的顺序检查连接的运行状况，直至找到可以使用的连接为止。如果某个可用区（AZ）出现故障，则来自该可用区的连接将无法通过检查并会被跳过。

1. AWS Glue 使用以下内容验证连接：
   + 检查 Amazon VPC ID 和子网是否有效。
   + 检查 NAT 网关或 Amazon VPC 端点是否存在。
   + 检查子网分配的 IP 地址是否超过 0 个。
   + 检查可用区是否运行正常。

   提交作业运行时 AWS Glue 无法验证连接。

1. 对于使用 Amazon VPC 的作业，所有驱动程序和执行程序都将在同一个可用区中创建，并在提交作业运行时选择连接。

1. 如果配置了重试，则 AWS Glue 将使用相同的连接重试。这是因为我们不能保证此连接的问题是长期存在的。如果某个可用区出现故障，则该可用区中运行的现有作业（取决于作业运行的阶段）可能会失败。重试应该会检测到可用区故障，然后为新的运行选择另一个可用区。

# 爬网程序使用 Lake Formation 权限时出现爬网程序错误
<a name="error-crawler-config-lf"></a>

使用 Lake Formation 凭证配置爬网程序时，通过以下信息诊断和修复各种问题。

## 错误：S3 位置：s3://examplepath 未注册
<a name="error-s3-location"></a>

要让爬网程序使用 Lake Formation 凭证运行，您需要先设置 Lake Formation 权限。要解决此错误，请向 Lake Formation 注册目标 Amazon S3 位置。有关更多信息，请参阅 [Registering an Amazon S3 location](https://docs.aws.amazon.com/lake-formation/latest/dg/register-location.html)（注册 Amazon S3 位置）。

## 错误：用户/角色未授权执行：资源上的 lakeformation:GetDataAccess
<a name="error-role-authorization"></a>

请使用 IAM 控制台或 AWS CLI 将 `lakeformation:GetDataAccess` 权限添加至爬网程序。获得此权限后，Lake Formation 将授权访问数据的临时凭证请求。请参见以下策略：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "lakeformation:GetDataAccess"
    ],
    "Resource": "*"
  }
}
```

------

## 错误：其上的 Lake Formation 权限不足（数据库名称：exampleDatabase，表名：exampleTable）
<a name="error-permissions"></a>

在 Lake Formation 控制台 ([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/)) 中，授予爬网程序针对数据库的角色访问权限（` Create`、`Describe`、`Alter`），该数据库指定为输出数据库。您也可以授予对表的权限。有关更多信息，请参阅 [Granting database permissions using the named resource method](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-cat-perms-named-resource.html)（使用 指定的资源方法授予数据库权限）。

## 错误：s3://examplepath 上的 Lake Formation 权限不足
<a name="error-location-permissions"></a>

1.  **跨账户爬取** 

   1. 使用注册 Amazon S3 存储桶的账户（账户 B）登录 Lake Formation 控制台 ([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/))。向将运行爬网程序的账户（账户 A）授予数据位置权限。这将允许爬网程序从目标 Amazon S3 位置读取数据。

   1.  在创建爬网程序的账户（账户 A）中，授予用于爬网程序运行的 IAM 角色目标 Amazon S3 位置上的数据位置权限，以使爬网程序能够从 Lake Formation 中的目标读取数据。有关更多信息，请参阅 [Granting data location permissions (external account)](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-location-permissions-external.html)（授予数据位置权限（外部账户））。

1. **账户内（爬网程序与注册的 Amazon S3 位置位于同一账户）爬取** - 向用于爬网程序在 Amazon S3 位置上运行的 IAM 角色授予数据位置权限，以便爬网程序可以从 Lake Formation 中的目标读取数据。有关更多信息，请参阅 [Granting data location permissions (same account)](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-location-permissions-local.html)（授予数据位置权限（同一账户））。

## 有关使用 Lake Formation 凭证配置爬网程序的常见问题
<a name="faq-crawler-config-lf"></a>

1.  **如何使用 AWS 控制台将爬网程序配置为使用 Lake Formation 凭证运行？** 

   在 AWS Glue 控制台（[https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)）中配置爬网程序时，选择选项 **Use Lake Formation credentials for crawling Amazon S3 data source**（使用 Lake Formation 凭证爬取 Amazon S3 数据来源）。对于跨账户爬取，请指定向 Lake Formation 注册的目标 Amazon S3 位置的 AWS 账户 ID。对于账户内爬取，**accountId** 字段是可选的。

1.  **如何使用 AWS CLI 将爬网程序配置为使用 Lake Formation 凭证运行？** 

   在 `CreateCrawler` API 调用期间，添加 `LakeFormationConfiguration`：

   ```
   "LakeFormationConfiguration": {
       "UseLakeFormationCredentials": true,
       "AccountId": "111111111111" (AWS account ID where the target Amazon S3 location is registered with Lake Formation)
     }
   ```

1.  **使用 Lake Formation 凭证的爬网程序支持哪些目标？** 

   使用 Lake Formation 凭证的爬网程序仅支持 Amazon S3（账户内和跨账户爬取）和账户内数据目录目标（其底层位置为 Amazon S3）和 Apache Iceberg 目标。

1.  **作为使用 Lake Formation 凭证的单个爬网程序的一部分，我是否可以爬取多个 Amazon S3 桶？** 

   不可以，对于使用 Lake Formation 凭证售卖的爬取目标，基础 Amazon S3 位置必须属于同一个桶。例如，如果它们在同一个桶 (bucket1) 下，则客户可以使用多个目标位置 `(s3://bucket1/folder1, s3://bucket1/folder2)`。不支持指定不同的桶 (s3://bucket1/folder1, s3://bucket2/folder2)。

# 对日志中的 AWS Glue for Ray 错误进行故障排除
<a name="troubleshooting-ray"></a>

**重要**  
自 2026 年 4 月 30 日起，AWS Glue for Ray 将不再向新客户开放。要使用 AWS Glue for Ray，请在该日期之前注册。现有客户可以继续正常使用该服务。要获取与 AWS Glue for Ray 相似的功能，可探索 Amazon EKS。有关更多信息，请参阅 [AWS Glue for Ray 终止支持](https://docs.aws.amazon.com/glue/latest/dg/awsglue-ray-jobs-availability-change.html)。

AWS Glue 提供对作业运行期间由 Ray 进程发出的日志的访问权限。如果您在 Ray 作业中遇到错误或意外行为，请先从日志中收集信息以确定失败原因。我们还为交互式会话提供类似的日志。会话日志以 `/aws-glue/ray/sessions` 前缀提供。

当您的作业运行时，日志行会实时发送到 CloudWatch。运行完成后，打印语句会附加到 CloudWatch 日志中。作业运行后，日志将保留两周。

## 检查 Ray 作业日志
<a name="troubleshooting-ray-log-locations"></a>

当作业失败时，收集您的作业名称和作业运行 ID。您可以在 AWS Glue 控制台中找到这些内容。导航到作业页面，然后导航到 **Runs**（运行）选项卡。Ray 作业日志存储在以下专用 CloudWatch 日志组中。
+ `/aws-glue/ray/jobs/script-log/` — 存储您的主 Ray 脚本发出的日志。
+ `/aws-glue/ray/jobs/ray-monitor-log/` — 存储 Ray 自动缩放器进程发出的日志。这些日志是针对头节点生成的，而不是为其他 Worker 节点生成的。
+ `/aws-glue/ray/jobs/ray-gcs-logs/` - 存储 GCS（全局控制存储）进程发出的日志。这些日志是针对头节点生成的，而不是为其他 Worker 节点生成的。
+ `/aws-glue/ray/jobs/ray-process-logs/` - 存储在头节点上运行的其他 Ray 进程（主要是控制面板代理）发出的日志。这些日志是针对头节点生成的，而不是为其他 Worker 节点生成的。
+ ` /aws-glue/ray/jobs/ray-raylet-logs/` - 存储每个 raylet 进程发出的日志。这些日志是在每个 Worker 节点的单个数据流中收集的。
+ `/aws-glue/ray/jobs/ray-worker-out-logs/` - 存储集群中每个工作线程的 `stdout` 日志。这些日志是为每个 Worker 节点生成的，包括头节点。
+ `/aws-glue/ray/jobs/ray-worker-err-logs/` - 存储集群中每个工作线程的 `stderr` 日志。这些日志是为每个 Worker 节点生成的，包括头节点。
+ `/aws-glue/ray/jobs/ray-runtime-env-log/` - 存储有关 Ray 设置过程的日志。这些日志是为每个 Worker 节点生成的，包括头节点。

## Ray 作业错误故障排除
<a name="troubleshooting-ray-errors"></a>

要了解 Ray 日志组的组织结构，并找到可以帮助您解决错误的日志组，需要了解有关 Ray 架构的背景信息。

在 AWS Glue ETL 中，工作线程对应于一个实例。当您为某项 AWS Glue 作业配置工作线程时，您需要设置专用于作业的实例的类型和数量。Ray 以不同的方式使用*工件*一词。

Ray 使用*头节点*和* Worker 节点*来区分 Ray 集群中实例的职责。Ray Worker 节点可以托管多个*操作者*进程，这些进程执行计算以实现分布式计算的结果。运行函数副本的操作者称为*副本*。副本操作者也可以称为工作线程进程。副本也可以在头节点上运行，该节点被称为头节点，因为它运行其他进程来协调集群。

参与计算的每个操作者都会生成自己的日志流。这为我们提供了一些见解：
+ 发出日志的进程数量，可能大于分配给作业的工作线程数量。通常，每个实例上的每个核心都有一个操作者。
+  Ray 头节点发出集群管理和启动日志。相比之下，Ray Worker 节点只会发出在其上执行的工作的日志。

有关 Ray 架构的更多信息，请参阅 Ray 文档中的[架构白皮书]( https://docs.ray.io/en/latest/ray-contribute/whitepaper.html)。

### 问题领域：Amazon S3 访问权限
<a name="troubleshooting-ray-errors-s3"></a>

检查作业运行的失败消息。如果这不能提供足够的信息，请检查 `/aws-glue/ray/jobs/script-log/`。

### 问题领域：PIP 依赖关系管理
<a name="troubleshooting-ray-errors-dependencies"></a>

检查 `/aws-glue/ray/jobs/ray-runtime-env-log/`。

### 问题领域：检查主进程中的中间值
<a name="troubleshooting-ray-errors-main-process"></a>

向主脚本写入 `stderr` 或从主脚本写出 `stdout`，然后从 `/aws-glue/ray/jobs/script-log/` 中检索日志。

### 问题领域：检查子进程中的中间值
<a name="troubleshooting-ray-errors-worker-process"></a>

从 `remote` 函数写入 `stderr` 或写出 `stdout`。然后，从 `/aws-glue/ray/jobs/ray-worker-out-logs/` 或 `/aws-glue/ray/jobs/ray-worker-err-logs/` 检索日志。您的函数可能已在任何副本上运行，因此您可能需要检查多个日志才能找到预期的输出。

### 问题领域：解释错误消息中的 IP 地址
<a name="troubleshooting-ray-errors-ips"></a>

在某些错误情况下，您的作业可能会发出包含 IP 地址的错误消息。这些 IP 地址是临时性的，供集群用来识别节点并在节点之间进行通信。根据 IP 地址，节点的日志将发布到带有唯一后缀的日志流。

在 CloudWatch 中，您可以通过识别此后缀来筛选日志，以检查特定于此 IP 地址的日志。例如，给定 *FAILED\$1IP* 和 *JOB\$1RUN\$1ID*，您可以用以下方式标识后缀：

```
filter @logStream like /JOB_RUN_ID/
| filter @message like /IP-/
| parse @message "IP-[*]" as ip
| filter ip like /FAILED_IP/
| fields replace(ip, ":", "_") as uIP
| stats count_distinct by uIP as logStreamSuffix
| display logStreamSuffix
```

# AWS Glue 机器学习异常
<a name="exceptions-machine-learning"></a>

本主题介绍与机器学习相关的 AWS Glue 异常的 HTTP 错误代码和字符串。为执行操作时可能发生的每个机器学习活动提供错误代码和错误字符串。此外，您还可以看到是否可以重试导致错误的操作。

## CancelMLTaskRunActivity
<a name="exceptions-machine-learning-CancelMLTaskRunActivity"></a>

此活动具有以下异常：
+ EntityNotFoundException (400)
  + “在具有句柄 [transformName] 的账户 [accountId] 中找不到 MLTransform。”
  + “在转换 [transformName] 的账户 [accountId] 中找不到 [taskRunId] 的 ML 任务运行。”

  是否确定重试：否。

## CreateMLTaskRunActivity
<a name="exceptions-machine-learning-CreateMLTransformActivity"></a>

此活动具有以下异常：
+ InvalidInputException (400)
  + “由于意外输入而导致内部服务失败。”
  + “应在转换中指定 AWS Glue 表输入源。”
  + “输入源列 [columnName] 具有在目录中定义的无效数据类型。”
  + “必须只提供一个输入记录表。”
  + “应指定数据库名称。”
  + “应指定表名称。”
  + “架构未在转换上定义。”
  + “架构应包含给定的主键：[primaryKey]。”
  + “获取数据目录架构时出现问题：[message]。”
  + “无法同时设置最大容量和工作线程数量/类型。”
  + “应同时设置 WorkerType 和 NumberOfWorkers。”
  + “MaxCapacity 应大于或等于 [maxCapacity]。”
  + “NumberOfWorkers 应大于或等于 [maxCapacity]。”
  + “最大重试次数应为非负值。”
  +  “查找匹配参数尚未设置。”
  + “必须在查找匹配项参数中指定主键。”

  是否确定重试：否。
+ AlreadyExistsException (400)
  + “名为 [transformName] 的转换已存在。”

  是否确定重试：否。
+ IdempotentParameterMismatchException (400)
  + “转换 [transformName] 的幂等创建请求的参数不匹配。”

  是否确定重试：否。
+ InternalServiceException (500)
  + “依赖关系失败。”

  是否确定重试：是。
+ ResourceNumberLimitExceededException (400)
  + “ML 转换计数 ([count]) 已超过 [limit] 次转换的限制。”

  是否确定重试：是（一旦您删除了一个转换以便为这个新转换腾出空间）。

## DeleteMLTransformActivity
<a name="exceptions-machine-learning-DeleteMLTransformActivity"></a>

此活动具有以下异常：
+ EntityNotFoundException (400)
  + “在具有句柄 [transformName] 的账户 [accountId] 中找不到 MLTransform”

  是否确定重试：否。

## GetMLTaskRunActivity
<a name="exceptions-machine-learning-GetMLTaskRunActivity"></a>

此活动具有以下异常：
+ EntityNotFoundException (400)
  + “在具有句柄 [transformName] 的账户 [accountId] 中找不到 MLTransform。”
  + “在转换 [transformName] 的账户 [accountId] 中找不到 [taskRunId] 的 ML 任务运行。”

  是否确定重试：否。

## GetMLTaskRunsActivity
<a name="exceptions-machine-learning-GetMLTaskRunsActivity"></a>

此活动具有以下异常：
+ EntityNotFoundException (400)
  + “在具有句柄 [transformName] 的账户 [accountId] 中找不到 MLTransform。”
  + “在转换 [transformName] 的账户 [accountId] 中找不到 [taskRunId] 的 ML 任务运行。”

  是否确定重试：否。

## GetMLTransformActivity
<a name="exceptions-machine-learning-GetMLTransformActivity"></a>

此活动具有以下异常：
+ EntityNotFoundException (400)
  + “在具有句柄 [transformName] 的账户 [accountId] 中找不到 MLTransform。”

  是否确定重试：否。

## GetMLTransformsActivity
<a name="exceptions-machine-learning-GetMLTransformsActivity"></a>

此活动具有以下异常：
+ EntityNotFoundException (400)
  + “在具有句柄 [transformName] 的账户 [accountId] 中找不到 MLTransform。”

  是否确定重试：否。
+ InvalidInputException (400)
  + “账户 ID 不能为空。”
  + “列 [column] 不支持排序。”
  + “[column] 不能为空。”
  + “由于意外输入而导致内部服务失败。”

  是否确定重试：否。

## GetSaveLocationForTransformArtifactActivity
<a name="exceptions-machine-learning-GetSaveLocationForTransformArtifactActivity"></a>

此活动具有以下异常：
+ EntityNotFoundException (400)
  + “在具有句柄 [transformName] 的账户 [accountId] 中找不到 MLTransform。”

  是否确定重试：否。
+ InvalidInputException (400)
  + “不支持的构件类型 [artifactType]。”
  + “由于意外输入而导致内部服务失败。”

  是否确定重试：否。

## GetTaskRunArtifactActivity
<a name="exceptions-machine-learning-GetTaskRunArtifactActivity"></a>

此活动具有以下异常：
+ EntityNotFoundException (400)
  + “在具有句柄 [transformName] 的账户 [accountId] 中找不到 MLTransform。”
  + “在转换 [transformName] 的账户 [accountId] 中找不到 [taskRunId] 的 ML 任务运行。”

  是否确定重试：否。
+ InvalidInputException (400)
  + “文件名‘[fileName]’无效，无法发布。”
  + “无法检索 [taskType] 任务类型的构件。”
  + “无法检索 [artifactType] 的构件。”
  + “由于意外输入而导致内部服务失败。”

  是否确定重试：否。

## PublishMLTransformModelActivity
<a name="exceptions-machine-learning-PublishMLTransformModelActivity"></a>

此活动具有以下异常：
+ EntityNotFoundException (400)
  + “在具有句柄 [transformName] 的账户 [accountId] 中找不到 MLTransform。”
  + “找不到账户 ID - [accountId] - 和转换 ID - [transformId] 的版本为 [version] 的现有模型。”

  是否确定重试：否。
+ InvalidInputException (400)
  + “文件名‘[fileName]’无效，无法发布。”
  + “无符号字符串 [string] 上的前导减号无效。”
  + “[string] 结尾处的数字错误。”
  +  “字符串值 [string] 超过无符号长型值的范围。”
  + “由于意外输入而导致内部服务失败。”

  是否确定重试：否。

## PullLatestMLTransformModelActivity
<a name="exceptions-machine-learning-PullLatestMLTransformModelActivity"></a>

此活动具有以下异常：
+ EntityNotFoundException (400)
  + “在具有句柄 [transformName] 的账户 [accountId] 中找不到 MLTransform。”

  是否确定重试：否。
+ InvalidInputException (400)
  + “由于意外输入而导致内部服务失败。”

  是否确定重试：否。
+ ConcurrentModificationException (400)
  + “由于竞争性插件的参数不匹配，无法创建要训练的模型版本。”
  + “转换 ID [transformId] 的 ML 转换模型过时或正在由另一个进程更新； 请重试。”

  是否确定重试：是。

## PutJobMetadataForMLTransformActivity
<a name="exceptions-machine-learning-PutJobMetadataForMLTransformActivity"></a>

此活动具有以下异常：
+ EntityNotFoundException (400)
  + “在具有句柄 [transformName] 的账户 [accountId] 中找不到 MLTransform。”
  + “在转换 [transformName] 的账户 [accountId] 中找不到 [taskRunId] 的 ML 任务运行。”

  是否确定重试：否。
+ InvalidInputException (400)
  + “由于意外输入而导致内部服务失败。”
  + “未知的作业元数据类型 [jobType]。”
  +  “必须提供任务运行 ID 才能更新。”

  是否确定重试：否。

## StartExportLabelsTaskRunActivity
<a name="exceptions-machine-learning-StartExportLabelsTaskRunActivity"></a>

此活动具有以下异常：
+ EntityNotFoundException (400)
  + “在具有句柄 [transformName] 的账户 [accountId] 中找不到 MLTransform。”
  + “账户 ID [accountId] 中不存在 transformId [transformId] 的标签集。”

  是否确定重试：否。
+ InvalidInputException (400)
  + “[message]。”
  + “提供的 S3 路径与转换不在同一个区域中。预期的区域为 [region]，但获得的区域为 [region]。”

  是否确定重试：否。

## StartImportLabelsTaskRunActivity
<a name="exceptions-machine-learning-StartExportLabelsTaskRunActivity"></a>

此活动具有以下异常：
+ EntityNotFoundException (400)
  + “在具有句柄 [transformName] 的账户 [accountId] 中找不到 MLTransform。”

  是否确定重试：否。
+ InvalidInputException (400)
  + “[message]。”
  + “标签文件路径无效。”
  + “无法访问 [labelPath] 中的标签文件。[message]。”
  + “无法使用转换中提供的 IAM 角色。角色：[role]。”
  + “大小为 0 的标签文件无效。”
  + “提供的 S3 路径与转换不在同一个区域中。预期的区域为 [region]，但获得的区域为 [region]。”

  是否确定重试：否。
+ ResourceNumberLimitExceededException (400)
  + “标签文件已超过 [limit] MB 的限制。”

  是否确定重试：否。考虑将标签文件拆分为几个较小的文件。

## StartMLEvaluationTaskRunActivity
<a name="exceptions-machine-learning-StartMLEvaluationTaskRunActivity"></a>

此活动具有以下异常：
+ EntityNotFoundException (400)
  + “在具有句柄 [transformName] 的账户 [accountId] 中找不到 MLTransform。”

  是否确定重试：否。
+ InvalidInputException (400)
  + “必须只提供一个输入记录表。”
  + “应指定数据库名称。”
  + “应指定表名称。”
  + “查找匹配参数尚未设置。”
  + “必须在查找匹配项参数中指定主键。”

  是否确定重试：否。
+ MLTransformNotReadyException (400)
  + “此操作只能应用于处于 READY 状态的转换。”

  是否确定重试：否。
+ InternalServiceException (500)
  + “依赖关系失败。”

  是否确定重试：是。
+ ConcurrentRunsExceededException (400)
  + “ML 任务运行计数 [count] 已超过 [limit] 个任务运行的转换限制。”
  + “ML 任务运行计数 [count] 已超过 [limit] 个任务运行的限制。”

  是否确定重试：是，等待任务运行完成后。

## StartMLLabelingSetGenerationTaskRunActivity
<a name="exceptions-machine-learning-StartMLLabelingSetGenerationTaskRunActivity"></a>

此活动具有以下异常：
+ EntityNotFoundException (400)
  + “在具有句柄 [transformName] 的账户 [accountId] 中找不到 MLTransform。”

  是否确定重试：否。
+ InvalidInputException (400)
  + “必须只提供一个输入记录表。”
  + “应指定数据库名称。”
  + “应指定表名称。”
  + “查找匹配参数尚未设置。”
  + “必须在查找匹配项参数中指定主键。”

  是否确定重试：否。
+ InternalServiceException (500)
  + “依赖关系失败。”

  是否确定重试：是。
+ ConcurrentRunsExceededException (400)
  + “ML 任务运行计数 [count] 已超过 [limit] 个任务运行的转换限制。”

  是否确定重试：是，在任务运行完成后。

## UpdateMLTransformActivity
<a name="exceptions-machine-learning-UpdateMLTransformActivity"></a>

此活动具有以下异常：
+ EntityNotFoundException (400)
  + “在具有句柄 [transformName] 的账户 [accountId] 中找不到 MLTransform。”

  是否确定重试：否。
+ InvalidInputException (400)
  + “另一个名为 [transformName] 的转换已经存在。”
  + “[message]。”
  + “转换名称不能为空。”
  + “无法同时设置最大容量和工作线程数量/类型。”
  + “应同时设置 WorkerType 和 NumberOfWorkers。”
  + “MaxCapacity 应大于或等于 [minMaxCapacity]。”
  + “NumberOfWorkers 应大于或等于 [minNumWorkers].”
  + “最大重试次数应为非负值。”
  + “由于意外输入而导致内部服务失败。”
  + “查找匹配参数尚未设置。”
  + “必须在查找匹配项参数中指定主键。”

  是否确定重试：否。
+ AlreadyExistsException (400)
  + “名为 [transformName] 的转换已存在。”

  是否确定重试：否。
+ IdempotentParameterMismatchException (400)
  + “转换 [transformName] 的幂等创建请求的参数不匹配。”

  是否确定重试：否。

# AWS Glue 限额
<a name="troubleshooting-service-limits"></a>

您可以联系 AWS 支持，[请求增加](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html)《AWS 一般参考》**中列出的服务限额。除非另有说明，否则，每个配额是区域特定的。有关更多信息，请参阅 [AWS Glue 终端节点和配额](https://docs.aws.amazon.com/general/latest/gr/glue.html)。