

# 在 AWS Glue Studio 中使用自定义连接器和连接
<a name="connectors-chapter"></a>

AWS Glue 使用 JDBC 连接为常用数据存储（例如 Amazon Redshift、Amazon Aurora、Microsoft SQL Server、MySQL、MongoDB 和 PostgreSQL）提供内置支持。AWS Glue 还允许您在数据提取、转换和加载（ETL）任务中使用自定义 JDBC 驱动程序。对于本地不支持的数据存储（如 SaaS 应用程序），您可以使用连接器。

*连接器*是一个可选代码包，可帮助访问 AWS Glue Studio 中的数据存储。您可以订阅 AWS Marketplace 中提供的几个连接器。

创建 ETL 任务时，您可以使用本地支持的数据存储、AWS Marketplace 中的连接器或您自己的自定义连接器。如果您使用连接器，您必须首先为连接器创建连接。*连接*包含连接到特定数据存储所需的属性。您将使用与 ETL 任务中的数据源和数据目标的连接。连接器和连接协同工作，方便访问数据存储。

 在创建连接器连接时，可以使用以下连接：
+  **Amazon Aurora** – 一种具有内置安全性、备份还原以及内存加速功能的可扩展、高性能关系数据库引擎。
+  **Amazon DocumentDB** – 一种可扩展、高度可用且完全托管式的文档数据库服务，支持 MongoDB 和 SQL API。
+  **Amazon Redshift** – 一种可扩展、高度可用且完全托管式的文档数据库服务，支持 MongoDB 和 SQL API。
+  **Azure SQL** – 一种由 Microsoft Azure 提供的基于云的关系数据库服务，具有可扩展、可靠和安全的数据存储和管理功能。
+  **Cosmos DB** – 一种由 Microsoft Azure 提供的全球分布式云数据库服务，具有可扩展、高性能的数据存储和查询功能。
+  **Google BigQuery** – 一种无服务器云数据仓库，用于对大型数据集快速运行 SQL 查询。
+  **JDBC** – 一种关系数据库管理系统（RDBMS），使用 Java API 来连接到数据连接并与之交互。
+  **Kafka** – 一种用于实时数据流式传输和消息收发的开源流式处理平台。
+  **MariaDB** – 一种由社区开发的 MySQL 分支，提供增强的性能、可扩展性和功能。
+  **MongoDB** – 一种面向文档的跨平台数据库，具有高可扩展性、高灵活性、高性能等特点。
+  **MongoDB Atlas** – 一种由 MongoDB 提供的基于云的数据库即服务（DBaaS）产品，可简化 MongoDB 部署的管理和扩展。
+  **Microsoft SQL Server** – 一种由微软公司推出的关系数据库管理系统（RDBMS），具有强大的数据存储、分析和报告功能。
+  **Mixpanel**：一种分析平台，可帮助企业分析用户如何与其网站、移动应用程序和其他数字产品进行交互。
+  **MySQL** – 一种广泛用于 Web 应用程序的开源关系数据库管理系统（RDBMS），并以可靠性和可扩展性闻名。
+  **网络** – 网络数据来源是指数据集成平台可以访问并且可通过网络访问的资源或服务。
+  **OpenSearch** – OpenSearch 数据来源是指 OpenSearch 可以连接到并从中提取数据的应用程序。
+  **Oracle** – 一种由甲骨文公司推出的关系数据库管理系统（RDBMS），具有强大的数据存储、分析和报告功能。
+  **PostgreSQL** – 一种开源关系数据库管理系统（RDBMS），具有强大的数据存储、分析和报告功能。
+  **Salesforce** – Salesforce 提供客户关系管理（CRM）软件，可在销售、客户服务、电子商务等方面为您提供帮助。如果您是 Salesforce 用户，可以将 AWS Glue 连接到您的 Salesforce 账户。然后，您可以使用 Salesforce 作为 ETL 作业中的数据来源或目标。通过运行这些作业，可在 Salesforce 与 AWS 服务或其他受支持的应用程序之间传输数据。
+  **SAP HANA** – 一种内存数据库和分析平台，提供快速数据处理、高级分析和实时数据集成等功能。
+  **Snowflake** – 基于云的数据仓库，提供可扩展、高性能的数据存储和分析服务。
+  **Teradata** – 一种开源关系数据库管理系统（RDBMS），提供高性能的数据存储、分析和报告功能。
+  **Vertica** – 一种专门面向大数据分析的列式分析数据仓库，提供快速查询、高级分析和可扩展性等功能。

# 创建自定义连接器
<a name="creating-custom-connectors"></a>

您还可以构建自己的连接器，然后将连接器代码上载到 AWS Glue Studio。

自定义连接器通过 AWS Glue Spark 运行时 API 集成到 AWS Glue Studio。AWS Glue Spark 运行时允许您插入兼容 Spark、Athena 或 JDBC 接口的连接器。它允许您传递自定义连接器可用的连接选项。

您可以使用 [AWS Glue 连接](https://docs.aws.amazon.com/glue/latest/dg/glue-connections.html)封装所有连接属性并为 ETL 任务提供连接名称。与数据目录连接集成，您可以在单个 Spark 应用程序中或跨不同应用程序的多个调用使用相同的连接属性。

您可以指定连接的其他选项。AWS Glue Studio 生成的任务脚本包含 `Datasource` 条目，该条目使用连接通过指定的连接选项插入连接器。例如：

```
Datasource = glueContext.create_dynamic_frame.from_options(connection_type = 
"custom.jdbc", connection_options = {"dbTable":"Account","connectionName":"my-custom-jdbc-
connection"}, transformation_ctx = "DataSource0")
```

**将自定义连接器添加到 AWS Glue Studio**

1. 为自定义连接器创建代码。有关更多信息，请参阅 [开发自定义连接器](developing-custom-connectors.md)。

1. 连接器增加了对 AWS Glue 功能的支持。下面举例说明了这些功能，以及如何在 AWS Glue Studio 生成的任务脚本内使用这些功能。
   + **数据类型映射** – 连接器可以在从基础数据存储中读取列的同时对列进行类型化。例如，解析记录并构造 `DynamicFrame` 时，`dataTypeMapping` 的 `{"INTEGER":"STRING"}` 会将所有类型为 `Integer` 的列转换为类型为 `String` 的列。这有助于用户将列转换为他们选择的类型。

     ```
     DataSource0 = glueContext.create_dynamic_frame.from_options(connection_type 
     = "custom.jdbc", connection_options = {"dataTypeMapping":{"INTEGER":"STRING"}", 
     connectionName":"test-connection-jdbc"}, transformation_ctx = "DataSource0")
     ```
   + **分区以进行并行读取** – AWS Glue 允许对列上的数据进行分区，以便从数据存储中读取并行数据。您必须指定分区列、下分区界限、上分区界限和分区数。此功能使您能够利用数据并行性以及为 Spark 应用程序分配的多个 Spark 执行程序。

     ```
     DataSource0 = glueContext.create_dynamic_frame.from_options(connection_type 
     = "custom.jdbc", connection_options = {"upperBound":"200","numPartitions":"4",
     "partitionColumn":"id","lowerBound":"0","connectionName":"test-connection-jdbc"},
     transformation_ctx = "DataSource0")
     ```
   + **使用 AWS Secrets Manager 存储凭证** – 数据目录连接还可以包含 AWS Secrets Manager 中所存储密钥的 `secretId`。AWS 密钥可以安全地存储身份验证和凭证信息，并在运行时将其提供给 AWS Glue。或者，您还可以在 Spark 脚本中指定 `secretId`，如下所示：

     ```
     DataSource = glueContext.create_dynamic_frame.from_options(connection_type 
     = "custom.jdbc", connection_options = {"connectionName":"test-connection-jdbc",
      "secretId"-> "my-secret-id"}, transformation_ctx = "DataSource0")
     ```
   + **使用行谓词和列投影筛选源数据** – AWS Glue Spark 运行时还允许用户向下推送 SQL 查询，以使用行谓词和列投影在源处筛选数据。这样一来，ETL 任务能够更快地从支持推送的数据存储加载筛选的数据。向下推送到 JDBC 数据源的 SQL 查询示例如下：`SELECT id, name, department FROM department WHERE id < 200.`

     ```
     DataSource = glueContext.create_dynamic_frame.from_options(connection_type = 
     "custom.jdbc", connection_options = {"query":"SELECT id, name, department FROM department 
     WHERE id < 200","connectionName":"test-connection-jdbc"}, transformation_ctx = 
     "DataSource0")
     ```
   + **任务书签** – AWS Glue 支持从 JDBC 源增量加载数据。AWS Glue 从数据存储中跟踪上次处理的记录，并在后续 ETL 任务运行中处理新的数据记录。任务书签使用主键作为书签键的默认列，前提是此列按顺序增加或减少。有关任务书签的更多信息，请参阅《AWS Glue 开发人员指南》**中的[任务书签](https://docs.aws.amazon.com/glue/latest/dg/monitor-continuations.html)。

     ```
     DataSource0 = glueContext.create_dynamic_frame.from_options(connection_type = 
     "custom.jdbc", connection_options = {"jobBookmarkKeys":["empno"], "jobBookmarkKeysSortOrder"
     :"asc", "connectionName":"test-connection-jdbc"}, transformation_ctx = "DataSource0")
     ```

1. 将自定义连接器打包为 JAR 文件，然后将文件上载到 Amazon S3。

1. 测试您的自定义连接器。有关更多信息，请参阅 [Glue 自定义连接器：本地验证测试指南](https://github.com/aws-samples/aws-glue-samples/tree/master/GlueCustomConnectors/localValidation/README.md)处 GitHub 上的说明。

1. 在 AWS Glue Studio 控制台中，在导航窗格中选择 **Connectors (连接器)**。

1. 在 **Connectors (连接器)** 页面上，选择 **Create custom connector (创建自定义连接器)**。

1. 在 **Create custom connector (创建自定义连接器)** 页面上，输入以下信息：
   + 指向 Amazon S3 中自定义代码 JAR 文件位置的路径。
   + AWS Glue Studio 将使用的连接器的名称。
   + 您的连接器类型，可以是 **JDBC**、**Spark** 或者 **Athena**。
   + 自定义代码中入口点的名称，AWS Glue Studio 将调用以使用连接器。
     + 对于 JDBC 连接器，此字段应该是 JDBC 驱动程序的类名称。
     + 对于 Spark 连接器，此字段应该是完全限定的数据源类名称或其别名，您可以使用 `format` 运算符。
   + （仅限 JDBC）JDBC 连接用于数据存储的基本 URL。
   + （可选）自定义连接器的描述。

1. 选择 **Create connector (创建连接器)**。

1. 在 **Connectors (连接器)** 页面中，创建使用此连接器的连接，如[为连接器创建连接](creating-connections.md)中所示。

## 将连接器添加到 AWS Glue Studio
<a name="creating-connectors"></a>

连接器是一段代码，便于您在数据存储和 AWS Glue 之间通信。您可以订阅 AWS Marketplace 中提供的连接器，或者您还可以创建自己的自定义连接器。

### 订阅 AWS Marketplace 连接器
<a name="subscribe-marketplace-connectors"></a>

AWS Glue Studio 助力轻松地从 AWS Marketplace 添加连接器。

**将连接器从 AWS Marketplace 添加到 AWS Glue Studio**

1. 在 AWS Glue Studio 控制台中，在导航窗格中选择 **Connectors (连接器)**。

1. 在 **Connectors (连接器)** 页面上，选择 **Go to AWS Marketplace (转到 Amazon Web Services Marketplace)**。

1. 在 AWS Marketplace 中的 **Featured products (特色产品)** 中，选择要使用的连接器。您可以选择其中一个特色连接器，也可以进行搜索。您可以搜索连接器的名称或类型，也可以使用选项来优化搜索结果。

   如果您要使用其中一个特色连接器，请选择 **View product (查看产品)**。如果通过搜索来查找连接器，请选择连接器的名称。

1. 在连接器的产品页面上，使用选项卡查看有关连接器的信息。如果您决定购买此连接器，请选择 **Continue to Subscribe (继续订阅)**。

1. 提供付款信息，然后选择 **Continue to Configure (继续配置)**。

1. 在 **Configure this software (配置此软件)** 页面上，选择部署方法和要使用的连接器版本。然后选择 **Continue to Launch (继续启动)** 以继续。

1. 在 **Launch this software (启动此软件)** 页面上，您可以查看连接器提供程序提供的 **Usage Instructions (使用说明)**。准备就绪后，选择**激活 AWS Glue Studio 中的连接**。

   一小段时间后，控制台将显示 AWS Glue Studio 中的 **Create marketplace connection (创建 Marketplace 连接)** 页面。

1. 创建使用此连接器的连接，如[为连接器创建连接](creating-connections.md)中所述。

   或者，您可以选择 **Activate connector only (仅激活连接器)** 以跳过此时创建连接。您稍后必须创建连接才能使用该连接器。

# 为连接器创建连接
<a name="creating-connections"></a>

AWS Glue 连接是存储特定数据存储的连接信息的数据目录对象。这些连接存储登录凭证、URI 字符串、Virtual Private Cloud (VPC) 等信息。在数据目录中创建连接，就可以不必在每次创建任务时都指定所有连接详细信息。

**为连接器创建连接**

1. 在 AWS Glue Studio 控制台中，在导航窗格中选择 **Connectors (连接器)**。在**连接**部分中，选择**创建连接**。

1. 在**创建数据连接**向导的第 1 步中，选择要为其创建连接的数据来源。可通过多种方式查看可用的数据来源，包括：
   + 通过选择选项卡筛选可用的数据来源。默认情况下，**全部连接器**处于选中状态。
   + 切换到**列表**可以列表形式查看数据来源，也可以切换回**网格**以在网格布局查看可用连接器。
   + 使用搜索栏缩小数据来源列表的范围。在键入过程中，系统将显示搜索匹配项，不匹配的来源将从视图中移除。

    选好数据来源后，选择**下一步**。

1. 在向导的第 2 步中配置连接。

   输入连接详细信息。根据所选连接器的类型，系统会提示您输入附加信息：  
![\[屏幕截图显示了“连接器”页面和“连接”部分。创建连接按钮已用红色方框包围起来。选择创建连接以启动连接向导。\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/connections-create-connection.png)

1.  在**创建数据连接**向导的第 1 步中，选择要为其创建连接的数据来源。可通过多种方式查看可用的数据来源。默认情况下，您将在网格布局中看到所有可用的数据来源。您也可以：
   + 切换到**列表**可以列表形式查看数据来源，也可以切换回**网格**以在网格布局查看可用连接器。
   + 使用搜索栏缩小数据来源列表的范围。在键入过程中，系统将显示搜索匹配项，不匹配的来源将从视图中移除。  
![\[屏幕截图显示了搜索栏和网格-列表切换开关。\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/connections-create-step-1-view.png)

    选好数据来源后，选择**下一步**。

1. 在向导的第 2 步中配置连接。

   输入连接详细信息。根据所选连接器的类型，您可能会需要输入额外的连接信息。这可能包括：
   +  **连接详细信息** – 这些字段将根据您要连接的数据来源而变化。例如，假设您要连接到 Amazon DocumentDB 数据库，则需要输入 Amazon DocumentDB URL。如果要连接到 Amazon Aurora，则需要选择数据库实例并输入数据库名称。以下是对于 Amazon Aurora 而言需要的连接详细信息：  
![\[屏幕截图显示了将 Amazon Aurora 配置为数据来源时需要的连接详细信息。\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/connections-create-step-2-configure.png)
   +  凭证类型 – 可选择**用户名和密码**或者 **AWS Secrets Manager**。输入请求的身份验证信息。
   + 对于使用 JDBC 的连接器，请输入为数据存储创建 JDBC URL 所需的信息。
   + 如果您使用 Virtual Private Cloud（VPC），请为 VPC 输入网络信息。

1. 在向导的第 3 步中设置连接属性。在这一步中，您可以选择添加描述和标签。名称为必填项，且已预先填充默认值。选择**下一步**。

1. 查看连接源、详细信息和属性。如果要进行任何更改，请在向导的这一步选择**编辑**。准备就绪后，选择**创建连接**。

   选择**创建连接**。

   您将返回到 **Connectors (连接器)** 页面，信息性广告条会指示已创建的连接。您现在可以在您的 AWS Glue Studio 作业中使用连接。

# 创建 Kafka 连接
<a name="creating-connections-kafka"></a>

 创建 Kafka 连接时，从下拉菜单中选择 **Kafka** 将显示要配置的其他设置：
+  Kafka 集群详细信息 
+  身份验证 
+  加密 
+  网络操作 

 **配置 Kafka 集群详细信息** 

1.  选择集群位置。可以从 **Amazon Managed for Apache Kafka (MSK)** 集群或 **Customer managed Apache Kafka**（客户管理的 Apache Kafka）集群中选择。有关 Amazon Managed Streaming for Apache Kafka 的更多信息，请参阅 [Amazon Managed Streaming for Apache Kafka (MSK)](https://docs.aws.amazon.com/msk/latest/developerguide/what-is-msk.html)。
**注意**  
 Amazon Managed Streaming for Apache Kafka 仅支持 TLS 和 SASL/SCRAM-SHA-512 身份验证方法。  
![\[屏幕截图显示了 Kafka 集群的详细信息部分，其中包含选择群集位置和输入 Kafka 引导服务器 URL 的选项。\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/kafka-cluster-details.png)

1.  输入 Kafka 引导服务器的 URL。通过用逗号分隔每台服务器，可以输入多个服务器。通过在 URL 末尾附加 `:<port number>`，包含端口号。

    例如：`b-1.vpc-test-2.034a88o.kafka-us-east-1.amazonaws.com:9094`

 **选择身份验证方法** 

![\[屏幕截图显示了选择 Kafka 身份验证方法的下拉菜单。\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/kafka-connection-authentication.png)


AWS Glue 支持用于身份验证的简单身份验证和安全层 (SASL) 框架。SASL 框架支持各种身份验证机制，且 AWS Glue 提供 SCRAM（用户名和密码）、GSSAPI（Kerberos 协议）和 PLAIN （用户名和密码）协议。

从下拉菜单中选择身份验证方法时，可以选择以下客户端身份验证方法：
+ 无 – 不进行身份验证。如果是为进行测试而创建连接，这非常有用。
+ SASL/SCRAM-SHA-512 - 选择此身份验证方法以指定身份验证凭证。有两个可用的选项：
  + 使用 AWS Secrets Manager（推荐）- 如果选择此选项，则可以将凭证存储在 AWS Secrets Manager 中，然后让 AWS Glue 在需要时访问该信息。指定存储 SSL 或 SASL 身份验证凭证的密钥。  
![\[如果身份验证方法是 SASL/SCRAM-SHA-512，则屏幕截图显示了身份验证凭证选项。\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/kafka-connection-authentication-sha-512.png)
  + 直接提供用户名和密码。
+  SASL/GSSAPI (Kerberos) – 如果选择此选项，则可以选择 keytab 文件、krb5.conf 文件的位置，然后输入 Kerberos 主体名称和 Kerberos 服务名称。keytab 文件和 krb5.conf 文件的位置必须位于 Amazon S3 位置。由于 MSK 尚不支持 SASL/GSSAPI，所以此选项仅适用于客户管理的 Apache Kafka 集群。有关更多信息，请参阅 [MIT Kerberos 文档：keytab](https://web.mit.edu/kerberos/krb5-latest/doc/basic/keytab_def.html)。
+  SASL/PLAIN - 选择此身份验证方法以指定身份验证凭证。有两个可用的选项：
  + 使用 AWS Secrets Manager（推荐）- 如果选择此选项，则可以将凭证存储在 AWS Secrets Manager 中，然后让 AWS Glue 在需要时访问该信息。指定存储 SSL 或 SASL 身份验证凭证的密钥。
  + 直接提供用户名和密码。
+  SSL 客户端身份验证 – 如果选择此选项，则可以通过浏览 Amazon S3 来选择 Kafka 客户端密钥库的位置。或者，您可以输入 Kafka 客户端密钥库密码和 Kafka 客户端密钥密码。

![\[如果 SSL 是身份验证方法，屏幕截图显示了加密选项。\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/kafka-connection-authentication-ssl.png)


 **配置加密设置** 

1.  如果 Kafka 连接需要 SSL 连接，请选中 **Require SSL connection**（需要 SSL 连接）复选框。请注意，如果无法通过 SSL 连接，则连接将失败。用于加密的 SSL 可以与任何身份验证方法（SASL/SCRAM-SHA-512、SASL/GSSAPI、SASL/PLAIN、SSL 客户端身份验证）一起使用，并且是可选的。

    如果身份验证方法设置为 **SSL client authentication**（SSL 客户端身份验证），则系统将自动选择并禁用此选项，以防止出现任何更改。

1.  （可选）。选择来自证书颁发机构 (CA) 的私有证书的位置。请注意，证书的位置必须在 S3 位置。选择 **Browse**（浏览），从连接的 S3 存储桶中选择文件。路径必须采用 `s3://bucket/prefix/filename.pem` 格式。它必须以文件名和 .pem 扩展名结尾。

1.  可以选择跳过验证证书颁发机构 (CA) 的证书。选择复选框 **Skip validation of certificate from certificate authority (CA)** [跳过验证证书颁发机构（CA）的证书]。如果未选中此框，则 AWS Glue 会验证三种算法的证书：
   +  SHA256withRSA 
   +  SHA384withRSA 
   +  SHA512withRSA 

![\[屏幕截图显示了配置加密的选项，包括是否需要 SSL 连接、从证书颁发机构 (CA) 处选择私有证书位置的选项，以及跳过证书颁发机构 (CA) 颁发的证书验证选项。\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/kafka-connection-encryption.png)


 **（可选）网络选项** 

 下面是配置 VPC、子网和安全组的可选步骤。如果您的 AWS Glue 任务需要在 virtual private cloud (VPC) 子网中的 Amazon EC2 实例上运行，必须提供其他特定于 VPC 的配置信息。

1.  选择包含您的数据源的 virtual private cloud (VPC)。

1.  选择您的 VPC 所在的子网。

1.  选择允许访问 VPC 子网中数据存储的一个或多个安全组。安全组与附加到子网的 ENI 相关联。必须为所有 TCP 端口选择至少一个具有自引用入站规则的安全组。

![\[屏幕截图显示了 VPC、子网和安全组的可选网络选项。\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/kafka-connection-network-options.png)


# 使用自定义连接器编写任务
<a name="job-authoring-custom-connectors"></a>

您可以在 AWS Glue Studio 中为数据源节点和数据目标节点使用连接器和连接。

**Topics**
+ [创建任务，为数据源使用连接器](#create-job-connectors)
+ [为使用连接器的节点配置源属性](#edit-connector-source)
+ [为使用连接器的节点配置目标属性](#edit-connector-target)

## 创建任务，为数据源使用连接器
<a name="create-job-connectors"></a>

创建新任务时，可以为数据源和数据目标选择连接器。

**创建任务，为数据源或数据目标使用连接器**

1. 登录 AWS 管理控制台，然后通过以下网址打开 AWS Glue Studio 控制台：[https://console.aws.amazon.com/gluestudio/](https://console.aws.amazon.com/gluestudio/)。

1. 在 **Connectors (连接器)** 页面的 **Your connections (您的连接)** 资源列表中，选择要在任务中使用的连接，然后选择 **Create job (创建任务)**。

   或者，在 AWS Glue Studio **Jobs (任务)** 页面的 **Create job (创建任务)** 下面，选择 **Source and target added to the graph (已添加到图形中的源和目标)**。在 **Source (源)** 下拉列表中，选择要在任务中使用的自定义连接器。还可以为 **Target (目标)** 选择连接器。  
![\[\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/create-job-data-sources-screenshot.png)

1. 选择 **Create (创建)** 以打开可视化任务编辑器。

1. 配置数据源节点，如[为使用连接器的节点配置源属性](#edit-connector-source)中所示。

1. 添加转换、其他数据存储和数据目标以继续创建 ETL 任务，如[在 AWS Glue Studio 中启动视觉 ETL 作业](edit-nodes-chapter.md)中所示。

1. 配置任务属性以自定义任务运行环境，如[修改任务属性](managing-jobs-chapter.md#edit-jobs-properties)中所示。

1. 保存并运行任务。

## 为使用连接器的节点配置源属性
<a name="edit-connector-source"></a>

创建为数据源使用连接器的任务后，可视任务编辑器将显示任务图，其中包含为连接器配置的数据源节点。您必须为该节点配置数据源属性。

**为使用连接器的数据源节点配置属性**

1. 选择任务图中的连接器数据源节点，或者添加新节点，然后为 **Node type (节点类型)** 选择连接器。然后，在右侧的节点详细信息面板中，选择 **Data source properties (数据源属性)** 选项卡（如果尚未选择）。  
![\[\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/data-source-properties-connector-screenshot2.png)

1. 在 **Data source properties (数据源属性)** 选项卡上，选择要用于此任务的连接。

   输入每种连接类型所需的附加信息：

------
#### [ JDBC ]
   + **Data source input type (数据源输入类型)**：选择以提供表名称或 SQL 查询作为数据源。根据您的选择，您需要提供以下附加信息：
     + **Table name (表名称)**：数据源中表的名称。如果数据源未使用术语*表*，则提供适当数据结构的名称，如自定义连接器使用信息所示（AWS Marketplace 中提供)。
     + **Filter predicate (筛选条件谓词)**：读取数据源时使用的条件子句，类似于 `WHERE` 子句，用于检索数据的子集。
     + **Query code (查询代码)**：输入用于从数据源检索特定数据集的 SQL 查询。基本 SQL 查询示例：

       ```
       SELECT column_list FROM 
                                 table_name WHERE where_clause
       ```
   + **Schema (架构)**：因为 AWS Glue Studio 使用存储在连接中的信息来访问数据源，而不是从数据目录表中检索元数据信息，所以您必须为数据源提供架构元数据。选择 **Add schema (添加架构)**，打开架构编辑器。

     有关如何使用架构编辑器的说明，请参阅[编辑自定义转换节点的架构](transforms-custom.md#transforms-custom-editschema)。
   + **Partition column (分区列)**：（可选）您可以为 **Partition Column (分区列)**、**Lower bound (下限)**、**Upper bound (上限)** 和 **Number of partitions (分区数)** 提供值，对数据读取进行分区。

     `lowerBound` 和 `upperBound` 值用于确定分区步长，而不是用于筛选表中的行。对表中的所有行进行分区并返回。
**注意**  
列分区为用于读取数据的查询添加额外的分区条件。使用查询（而不是表名称）时，您应验证查询是否适用于指定的分区条件。例如：  
如果您的查询格式为 `"SELECT col1 FROM table1"`，则在使用分区列的查询结尾附加 `WHERE` 子句，以测试查询。
如果您的查询格式为 `"SELECT col1 FROM table1 WHERE col2=val"`，则通过 `AND` 和使用分区列的表达式扩展 `WHERE` 子句，以测试查询。
   + **Data type casting (数据类型转换)**：如果数据源使用 JDBC 中不可用的数据类型，请使用此部分指定如何将数据源中的数据类型转换为 JDBC 数据类型。您最多可指定 50 个不同的数据类型转换。数据源中使用相同数据类型的所有列都将以相同的方式进行转换。

     例如，如果数据源中有三列使用 `Float` 数据类型，并且您指示 `Float` 数据类型应转换为 JDBC `String` 数据类型，则使用 `Float` 数据类型的所有三列将转换为 `String` 数据类型。
   + **Job bookmark keys (任务书签键)**：任务书签可帮助 AWS Glue 维护状态信息，并防止重新处理旧数据。指定一个或多个列为书签键。AWS Glue Studio 使用书签键跟踪上次运行 ETL 任务期间已处理的数据。用于自定义书签键的列都必须严格单调递增或递减，但是允许有间隙。

     如果您输入多个书签键，它们将合并成一个复合键。复合任务书签键不应包含重复的列。如果不指定书签键，则预设情况下，AWS Glue Studio 将使用主键作为书签键，前提是主键按顺序递增或递减（没有间隙）。如果表没有主键，但任务书签属性已启用，则必须提供自定义任务书签键。否则，无法搜索用作默认值的主键，任务运行将失败。
   + **Job bookmark keys sorting order (任务书签键排序)**：选择键值是按顺序递增还是递减。

------
#### [ Spark ]
   + **Schema (架构)**：因为 AWS Glue Studio 使用存储在连接中的信息来访问数据源，而不是从数据目录表中检索元数据信息，所以您必须为数据源提供架构元数据。选择 **Add schema (添加架构)**，打开架构编辑器。

     有关如何使用架构编辑器的说明，请参阅[编辑自定义转换节点的架构](transforms-custom.md#transforms-custom-editschema)。
   + **Connection options (连接选项)**：根据需要输入其他键值对，提供其他连接信息或选项。例如，您可以输入数据库名称、表名、用户名和密码。

     例如，对于 OpenSearch，您可以输入以下键值对，如[教程：使用 AWS Glue Connector for Elasticsearch](tutorial-elastisearch-connector.md)中所述：
     + `es.net.http.auth.user` : `username`
     + `es.net.http.auth.pass` : `password` 
     + `es.nodes` : `https://<Elasticsearch endpoint>`
     + `es.port` : `443`
     + `path`: `<Elasticsearch resource>`
     + `es.nodes.wan.only` : `true`

   有关要使用的最小连接选项的示例，请参阅 GitHub 上的测试脚本示例 [MinimalSparkConnectorTest.scala](https://github.com/aws-samples/aws-glue-samples/tree/master/GlueCustomConnectors/development/Spark/MinimalSparkConnectorTest.scala)，显示了您通常在连接中提供的连接选项。

------
#### [ Athena ]
   + **Table name (表名称)**：数据源中表的名称。如果您使用从 Athena-CloudWatch logs 读取数据的连接器，则需要输入表名 `all_log_streams`。
   + **Athena schema name (Athena 架构名称)**：在 Athena 数据源中选择与包含该表的数据库相对应的架构。如果您使用从 Athena-CloudWatch logs 读取数据的连接器，则需要输入类似于 `/aws/glue/name` 的表名。
   + **Schema (架构)**：因为 AWS Glue Studio 使用存储在连接中的信息来访问数据源，而不是从数据目录表中检索元数据信息，所以您必须为数据源提供架构元数据。选择 **Add schema (添加架构)**，打开架构编辑器。

     有关如何使用架构编辑器的说明，请参阅[编辑自定义转换节点的架构](transforms-custom.md#transforms-custom-editschema)。
   + **Additional connection options (其他连接选项)**：根据需要输入其他键值对，提供其他连接信息或选项。

   有关示例，请参阅 `README.md` 文件，网址为 [https://github.com/aws-samples/aws-glue-samples/tree/master/GlueCustomConnectors/development/Athena](https://github.com/aws-samples/aws-glue-samples/tree/master/GlueCustomConnectors/development/Athena)。在本文档中的步骤中，示例代码显示了所需的最小连接选项，即 `tableName`、`schemaName` 和 `className`。代码示例将这些选项指定为 `optionsMap` 变量，但您可以为连接指定它们，然后使用连接。

------

1. （可选）提供所需信息后，您可以选择节点详细信息面板中的 **Output schema (输出架构)** 选项卡，查看生成的数据架构。此选项卡上显示的架构将由您添加到任务图的子节点使用。

1. （可选）配置节点属性和数据源属性后，您可以选择节点详细信息窗格中的 Data preview (数据预览) 选项卡来预览数据源的数据集。当您首次为任务中的任何节点选择此选项卡时，系统会提示您提供 IAM 角色以访问数据。使用此功能会产生相关费用，并且一旦您提供 IAM 角色，则会立即开始计费。

## 为使用连接器的节点配置目标属性
<a name="edit-connector-target"></a>

如果将连接器用于数据目标类型，则必须配置数据目标节点的属性。

**为使用连接器的数据目标节点配置属性**

1. 在任务图中选择连接器数据目标节点。然后，在右侧的节点详细信息面板中，选择 **Data target properties (数据目标属性)** 选项卡（如果尚未选择）。

1. 在 **Data target properties (数据目标属性)** 选项卡上，选择用于写入目标的连接。

   输入每种连接类型所需的附加信息：

------
#### [ JDBC ]
   + **Connection (连接)**：选择要与连接器一起使用的连接。有关如何创建连接的信息，请参阅[为连接器创建连接](creating-connections.md)。
   + **Table name (表名称)**：数据目标中表的名称。如果数据目标未使用术语*表*，则提供适当数据结构的名称，如自定义连接器使用信息所示（AWS Marketplace 中提供)。
   + **Batch size (批处理大小)**（可选）：在单个操作中输入要在目标表中插入的行数或记录数。默认值是 1000 行。

------
#### [ Spark ]
   + **Connection (连接)**：选择要与连接器一起使用的连接。如果以前未创建连接，请选择 **Create connection (创建连接)** 创建一个。有关如何创建连接的信息，请参阅[为连接器创建连接](creating-connections.md)。
   + **Connection options (连接选项)**：根据需要输入其他键值对，提供其他连接信息或选项。您可以输入数据库名称、表名、用户名和密码。

     例如，对于 OpenSearch，您可以输入以下键值对，如[教程：使用 AWS Glue Connector for Elasticsearch](tutorial-elastisearch-connector.md)中所述：
     + `es.net.http.auth.user` : `username`
     + `es.net.http.auth.pass` : `password` 
     + `es.nodes` : `https://<Elasticsearch endpoint>`
     + `es.port` : `443`
     + `path`: `<Elasticsearch resource>`
     + `es.nodes.wan.only` : `true`

   有关要使用的最小连接选项的示例，请参阅 GitHub 上的测试脚本示例 [MinimalSparkConnectorTest.scala](https://github.com/aws-samples/aws-glue-samples/tree/master/GlueCustomConnectors/development/Spark/MinimalSparkConnectorTest.scala)，显示了您通常在连接中提供的连接选项。

------

1. 提供所需信息后，您可以选择节点详细信息面板中的 **Output schema (输出架构)** 选项卡，查看生成的数据架构。

# 管理连接器和连接
<a name="managing-connectors"></a>

您可以在 AWS Glue 中使用**连接器**页面管理您的连接器和连接。

**Topics**
+ [查看连接器和连接详细信息](#connector-details)
+ [编辑连接器和连接](#editing-connectors)
+ [删除连接器和连接](#deleting-connectors)
+ [取消连接器的订阅](#cancel-subscription)

## 查看连接器和连接详细信息
<a name="connector-details"></a>

您可以在 **Connectors (连接)** 页面上的 **Your connectors (您的连接器)** 和 **Your connections (您的连接)** 资源表中，查看关于您的连接器和连接的摘要信息。要查看详细信息，请执行以下步骤。

**查看连接器或连接详细信息**

1. 在 AWS Glue Studio 控制台中，在导航窗格中选择 **Connectors (连接器)**。

1. 选择要查看其详细信息的连接器或连接。

1. 选择 **Actions (操作)**，然后选择 **View details (查看详细信息)**，打开相应连接器或连接的详细信息页面。

1. 在详细信息页面上，您可以选择 **Edit**（编辑）或 **Delete**（删除）连接器或连接。
   + 对于连接器，可以选择 **Create connection (创建连接)**，创建使用连接器的新连接。
   + 对于连接，您可以选择 **Create job (创建任务)**，创建使用连接的任务。

## 编辑连接器和连接
<a name="editing-connectors"></a>

您可以使用 **Connectors (连接器)** 页面更改您的连接器和连接中存储的信息。

**修改连接器或连接**

1. 在 AWS Glue Studio 控制台中，在导航窗格中选择 **Connectors (连接器)**。

1. 选择要更改的连接器或连接。

1. 选择**操作**，然后选择**编辑**。

   您还可以选择 **View details (查看详细信息)**，然后在连接器或连接详细信息页面上，选择 **Edit (编辑)**。

1. 在 **Edit connector (编辑连接器)** 或者 **Edit connection (编辑连接)** 页面上，更新信息，然后选择 **Save (保存)**。

## 删除连接器和连接
<a name="deleting-connectors"></a>

您可以使用 **connector (连接器)** 页面删除连接器和连接。如果删除某个连接器，还应删除为该连接器创建的所有连接。

**要从 AWS Glue Studio 中删除连接器，请执行以下操作**

1. 在 AWS Glue Studio 控制台中，在导航窗格中选择 **Connectors (连接器)**。

1. 选择要删除的连接器或连接。

1. 选择**操作**，然后选择**删除**。

   您还可以选择 **View details (查看详细信息)**，然后在连接器或连接详细信息页面上，选择 **Delete (删除)**。

1. 确认您要删除连接器或连接，方法是输入 **Delete**，然后选择 **Delete (删除)**。

   删除某个连接器时，还应删除为该连接器创建的所有连接。

使用已删除连接的任务将不再运行。您可以编辑任务以使用其他数据存储，也可以删除任务。有关如何删除任务的信息，请参阅[删除任务](managing-jobs-chapter.md#delete-jobs)。

如果您删除连接器，此操作不会取消 AWS Marketplace 中该连接器的订阅。要删除已删除连接器的订阅，请按[取消连接器的订阅](#cancel-subscription)中的说明操作。

## 取消连接器的订阅
<a name="cancel-subscription"></a>

从 AWS Glue Studio 中删除连接和连接器后，如果您不再需要该连接器，您可以在 AWS Marketplace 中取消订阅。

**注意**  
如果您取消对连接器的订阅，则不会从您的账户中删除连接器或连接。使用该连接器和相关连接的任务将无法再使用该连接器，并且会失效。  
在您从 AWS Marketplace 中取消订阅或重新订阅之前，您应先删除与该 AWS Marketplace 产品关联的现有连接和连接器。

**取消 AWS Marketplace 中连接器的订阅**

1. 登录 AWS Marketplace，然后通过以下网址打开 控制台：[https://console.aws.amazon.com/marketplace](https://console.aws.amazon.com/marketplace)。

1. 选择 **Manage subscriptions (选择订阅)**。

1. 在 **Manage subscriptions (管理订阅)** 页面上，选择要取消的连接器订阅旁边的 **Manage (管理)**。

1. 依次选择 **Actions (操作)** 和 **Delete Subscriptions (删除订阅)**。

1. 选中此复选框，确认正在运行的实例会向您的账户收取费用，然后选择 **Yes, cancel subscription (是，取消订阅)**。

# 开发自定义连接器
<a name="developing-custom-connectors"></a>

您可以编写从数据存储中读取数据或向数据存储写入数据的代码，并将数据格式化以用于 AWS Glue Studio 任务。您可以为 Spark、Athena 和 JDBC 数据存储创建连接器。GitHub 上发布的示例代码概述了您需要实现的基本接口。

您需要用于创建连接器代码的本地开发环境。您可以使用任意 IDE，甚至只使用命令行编辑器来编写连接器。开发环境示例包括：
+ 具有本地 AWS Glue ETL Maven 库的本地 Scala 环境，正如《AWS Glue 开发人员指南》**中的[使用 Scala 本地开发](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-libraries.html#develop-local-scala)所述。
+ IntelliJ IDE，可从 [https://www.jetbrains.com/idea/](https://www.jetbrains.com/idea/) 下载 IDE。

**Topics**
+ [开发 Spark 连接器](#code-spark-connector)
+ [开发 Athena 连接器](#code-athena-connector)
+ [开发 JDBC 连接器](#code-jdbc-connector)
+ [将自定义连接器与 AWS Glue Studio 结合使用的示例](#custom-connector-examples)
+ [为 AWS Marketplace 开发 AWS Glue 连接器](#code-marketplace-connector)

## 开发 Spark 连接器
<a name="code-spark-connector"></a>

您可以使用 Spark DataSource API V2（Spark 2.4）创建 Spark 连接器来读取数据。

**若要创建自定义 Spark 连接器**

按照 AWS Glue GitHub 示例库中的步骤开发 Spark 连接器，该库位于 [https://github.com/aws-samples/aws-glue-samples/tree/master/GlueCustomConnectors/development/Spark/README.md](https://github.com/aws-samples/aws-glue-samples/tree/master/GlueCustomConnectors/development/Spark/README.md)。

## 开发 Athena 连接器
<a name="code-athena-connector"></a>

您可以创建 Athena 连接器，供 AWS Glue 和 AWS Glue Studio 查询自定义数据源。

**若要创建自定义 Athena 连接器**

按照 AWS Glue GitHub 示例库中的步骤开发 Athena 连接器，该库位于 [https://github.com/aws-samples/aws-glue-samples/tree/master/GlueCustomConnectors/development/Athena](https://github.com/aws-samples/aws-glue-samples/tree/master/GlueCustomConnectors/development/Athena)。

## 开发 JDBC 连接器
<a name="code-jdbc-connector"></a>

您可以创建使用 JDBC 访问数据存储的连接器。

**创建自定义 JDBC 连接器**

1. 在本地开发环境中安装 AWS Glue Spark 运行时库。请参阅 AWS Glue GitHub 示例库中的说明，该库位于 [ https://github.com/aws-samples/aws-glue-samples/tree/master/GlueCustomConnectors/development/GlueSparkRuntime/README.md](https://github.com/aws-samples/aws-glue-samples/tree/master/GlueCustomConnectors/development/GlueSparkRuntime/README.md)。

1. 实施负责从数据源检索数据的 JDBC 驱动程序。请参阅适用于 Java SE 8 的 [Java 文档](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/)。

   在您的代码内创建入口点，AWS Glue Studio 将其用于查找您的连接器。**Class name (类名称)** 字段应该是 JDBC 驱动程序的完整路径。

1. 借助连接器使用 `GlueContext` API 读取数据。用户可以在 AWS Glue Studio 控制台中添加更多输入选项，配置与数据源的连接（如有必要）。有关演示如何使用自定义 JDBC 连接器读取和写入 JDBC 数据库的代码示例，请参阅[自定义和 AWS Marketplace connectionType 值](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-connect.html#aws-glue-programming-etl-connect-market)。

## 将自定义连接器与 AWS Glue Studio 结合使用的示例
<a name="custom-connector-examples"></a>

有关使用自定义连接器的示例，您可以参考以下博客：
+ [为带有 AWS Glue 的数据存储开发、测试和部署自定义连接器](https://aws.amazon.com/blogs/big-data/developing-testing-and-deploying-custom-connectors-for-your-data-stores-with-aws-glue/)
+ Apache Hudi：[使用 AWS Glue 自定义连接器写入 Apache Hudi 表](https://aws.amazon.com/blogs/big-data/writing-to-apache-hudi-tables-using-aws-glue-connector/)
+ Google BigQuery：[使用 AWS Glue 自定义连接器，将数据从 Google BigQuery 迁移到 Amazon S3](https://aws.amazon.com/blogs/big-data/migrating-data-from-google-bigquery-to-amazon-s3-using-aws-glue-custom-connectors/)
+ Snowflake（JDBC）：[使用 Snowflake 和 AWS Glue 执行数据转换](https://aws.amazon.com/blogs/big-data/performing-data-transformations-using-snowflake-and-aws-glue/)
+ SingleStore：[使用 SingleStore 和 AWS Glue 构建快速 ETL](https://aws.amazon.com/blogs/big-data/building-fast-etl-using-singlestore-and-aws-glue/)
+ Salesforce：[使用 CData JDBC 自定义连接器和 AWS Glue 将 Salesforce 数据提取到 Amazon S3](https://aws.amazon.com/blogs/big-data/ingest-salesforce-data-into-amazon-s3-using-the-cdata-jdbc-custom-connector-with-aws-glue) - 
+ MongoDB：[使用 Amazon DocumentDB（与 MongoDB 兼容）和 MongoDB 构建 AWS Glue Spark ETL 任务](https://aws.amazon.com/blogs/big-data/building-aws-glue-spark-etl-jobs-using-amazon-documentdb-with-mongodb-compatibility-and-mongodb/)
+ Amazon Relational Database Service（Amazon RDS）：[使用您自己的适用于 Amazon RDS 的 JDBC 驱动程序构建 AWS Glue Spark ETL 任务 ](https://aws.amazon.com/blogs/big-data/building-aws-glue-spark-etl-jobs-by-bringing-your-own-jdbc-drivers-for-amazon-rds/)
+ MySQL（JDBC）：[https://github.com/aws-samples/aws-glue-samples/blob/master/GlueCustomConnectors/development/Spark/SparkConnectorMySQL.scala](https://github.com/aws-samples/aws-glue-samples/blob/master/GlueCustomConnectors/development/Spark/SparkConnectorMySQL.scala)

## 为 AWS Marketplace 开发 AWS Glue 连接器
<a name="code-marketplace-connector"></a>

作为 AWS 合作伙伴，您可以创建自定义连接器并将其上载到 AWS Marketplace 以销售给 AWS Glue 客户。

开发连接器代码的过程与自定义连接器相同，但上载和验证连接器代码的过程更为详细。请参阅 GitHub 网站上[为 AWS Marketplace 创建连接器](https://github.com/aws-samples/aws-glue-samples/tree/master/GlueCustomConnectors/marketplace/publishGuide.pdf)中的说明。

# AWS Glue Studio 中连接器和连接的使用限制
<a name="connector-restrictions"></a>

当您从 AWS Marketplace 使用自定义连接器或连接器，请注意以下限制：
+ 为自定义连接器创建的连接不支持 testConnection API。
+ 自定义连接器不支持数据目录连接密码加密。
+ 如果为使用 JDBC 连接器的数据源节点指定筛选条件谓语，则无法使用任务书签。
+  不支持在 AWS Glue Studio 用户界面之外创建 Marketplace 连接。