

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

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

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

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

您可以指定连接的其他选项。Amazon 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")
```

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

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

1. 连接器增加了对 Amazon Glue 功能的支持。下面举例说明了这些功能，以及如何在 Amazon 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")
     ```
   + **分区以进行并行读取** – Amazon 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")
     ```
   + **使用 Amazon Secrets Manager 存储凭证** – 数据目录连接还可以包含 Amazon Secrets Manager 中所存储密钥的 `secretId`。Amazon 密钥可以安全地存储身份验证和凭证信息，并在运行时将其提供给 Amazon 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")
     ```
   + **使用行谓词和列投影筛选源数据** – Amazon 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")
     ```
   + **任务书签** – Amazon Glue 支持从 JDBC 源增量加载数据。Amazon Glue 从数据存储中跟踪上次处理的记录，并在后续 ETL 任务运行中处理新的数据记录。任务书签使用主键作为书签键的默认列，前提是此列按顺序增加或减少。有关任务书签的更多信息，请参阅《Amazon Glue 开发人员指南》**中的[任务书签](https://docs.amazonaws.cn/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. 在 Amazon Glue Studio 控制台中，在导航窗格中选择 **Connectors (连接器)**。

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

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

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

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

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

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

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

Amazon Glue Studio 助力轻松地从 Amazon Web Services Marketplace 添加连接器。

**将连接器从 Amazon Web Services Marketplace 添加到 Amazon Glue Studio**

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

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

1. 在 Amazon Web Services 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 (使用说明)**。准备就绪后，选择**激活 Amazon Glue Studio 中的连接**。

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

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

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