

# 教程：使用 Amazon Glue Studio 构建第一个流式处理工作负载


在本教程中，您将了解如何使用 Amazon Glue Studio 创建流式处理作业。Amazon GlueStudio 是一个用于创建 Amazon Glue 作业的可视化界面。

您可以创建连续运行的流式处理提取、转换、加载（ETL）作业，该作业使用来自 Amazon Kinesis Data Streams、Apache Kafka 和 Amazon Managed Streaming for Apache Kafka（Amazon MSK）等流式处理数据源的数据。

## 先决条件


要学习本教程，您需要一个具有 Amazon 控制台权限的用户以使用 Amazon Glue、Amazon Kinesis、Amazon S3、Amazon Athena、Amazon CloudFormation、Amazon Lambda 和 Amazon Cognito。

## 使用来自 Amazon Kinesis 的流式处理数据


**Topics**
+ [

### 使用 Kinesis Data Generator 生成模拟数据
](#streaming-tutorial-studio-kinesis-generate-data)
+ [

### 使用 Amazon Glue Studio 创建 Amazon Glue 流式处理作业
](#streaming-tutorial-studio-kinesis-create-job)
+ [

### 执行转换并将转换后的结果存储在 Amazon S3 中
](#streaming-tutorial-studio-kinesis-transformation)

### 使用 Kinesis Data Generator 生成模拟数据


您可以使用 Kinesis Data Generator（KDG）生成 JSON 格式的合成示例数据。您可以在[工具文档](https://awslabs.github.io/amazon-kinesis-data-generator/web/help.html)中找到完整的说明和详细信息。

1. 首先，单击 [https://console.amazonaws.cn/cloudformation/home?region=us-east-2#/stacks/new?templateURL=https%3A%2F%2Faws-data-analytics-workshops.s3.amazonaws.com/aws_glue/aws_glue_streaming/docs/glue-stream.yaml&stackName=glue-stream](https://console.amazonaws.cn/cloudformation/home?region=us-east-2#/stacks/new?templateURL=https%3A%2F%2Faws-data-analytics-workshops.s3.amazonaws.com/aws_glue/aws_glue_streaming/docs/glue-stream.yaml&stackName=glue-stream) 以在您的 Amazon 环境中运行 Amazon CloudFormation 模板。
**注意**  
您可能会遇到 CloudFormation 模板故障，因为您的 Amazon 账户中已存在某些资源，例如 Kinesis Data Generator 的 Amazon Cognito 用户。这可能是因为您已经从其他教程或博客中进行了设置。要解决此问题，您可以在一个新的 Amazon 账户中重新尝试此模板，也可以尝试使用其他 Amazon 区域。通过这些选项，您可以在不与现有资源冲突的情况下运行此教程。

   该模板已经预置了一个 Kinesis 数据流和一个 Kinesis Data Generator 账户。它还会创建一个 Amazon S3 存储桶来保存数据，并创建一个具有本教程所需权限的 Glue 服务角色。

1. 输入**用户名**和**密码**，以便 KDG 进行身份验证。记下用户名和密码以备将来使用。

1. 选择**下一步**，一直到最后一步。确认 IAM 资源的创建。检查屏幕上方是否有任何错误，比如密码不符合最低要求，然后部署模板。

1. 导航到堆栈的**输出**选项卡。模板部署完成后，将显示生成的属性 **KinesisDataGeneratorUrl**。单击该 URL。

1. 输入您记下的**用户名**和**密码**。

1. 选择您正在使用的区域，然后选择 Kinesis Stream `GlueStreamTest-{AWS::AccountId}`

1. 输入以下模板：

   ```
   {
       "ventilatorid": {{random.number(100)}},
       "eventtime": "{{date.now("YYYY-MM-DD HH:mm:ss")}}",
       "serialnumber": "{{random.uuid}}",
       "pressurecontrol": {{random.number(
           {
               "min":5,
               "max":30
           }
       )}},
       "o2stats": {{random.number(
           {
               "min":92,
               "max":98
           }
       )}},
       "minutevolume": {{random.number(
           {
               "min":5,
               "max":8
           }
       )}},
       "manufacturer": "{{random.arrayElement(
           ["3M", "GE","Vyaire", "Getinge"]
       )}}"
   }
   ```

   现在，您可以使用**测试模板**查看模拟数据，并使用**发送数据**将模拟数据摄取到 Kinesis。

1. 单击**发送数据**，并向 Kinesis 生成 0.5-1 万条记录。

### 使用 Amazon Glue Studio 创建 Amazon Glue 流式处理作业


1. 在同一区域的控制台中导航到 Amazon Glue。

1. 在左侧导航栏的**数据集成和 ETL** 下选择 **ETL 作业**。

1. **使用空白画布通过 Visual** 创建 Amazon Glue 作业。  
![\[屏幕截图显示了创建作业对话框。\]](http://docs.amazonaws.cn/glue/latest/dg/images/streaming-tutorial-1a.png)

1. 导航到**作业详细信息**选项卡。

1. 对于 Amazon Glue 作业名称，输入 `DemoStreamingJob`。

1. 对于 **IAM 角色**，选择 CloudFormation 模板预置的角色 `glue-tutorial-role-${Amazon::AccountId}`。

1. 对于 **Glue 版本**，选择 **Glue 3.0**。将所有其他选项保留为默认。  
![\[屏幕截图显示了“作业详细信息”选项卡。\]](http://docs.amazonaws.cn/glue/latest/dg/images/streaming-tutorial-1b.png)

1. 导航到 **Visual 选项卡**。

1. 单击加号图标。在搜索栏中输入 **Kinesis**。选择 **Amazon Kinesis** 数据来源。  
![\[屏幕截图显示了添加节点对话框。\]](http://docs.amazonaws.cn/glue/latest/dg/images/streaming-tutorial-1c.png)

1. 在**数据来源属性 - Kinesis Stream** 选项卡下，为 **Amazon Kinesis Source** 选择**流详细信息**。

1. 对于**数据流位置**，选择**流位于我的账户中**。

1. 选择您使用的区域。

1. 选择 `GlueStreamTest-{AWS::AccountId}` 流。

1. 将所有其他设置保留为默认。  
![\[屏幕截图显示了“数据来源属性”选项卡。\]](http://docs.amazonaws.cn/glue/latest/dg/images/streaming-tutorial-1d.png)

1. 导航到**数据预览**选项卡。

1. 单击**启动数据预览会话**，预览 KDG 生成的模拟数据。选择您之前为 Amazon Glue 流式处理作业创建的 Glue 服务角色。

   预览数据需要 30-60 秒才能显示。如果显示**没有可显示的数据**，请单击齿轮图标并将**要采样的行数**更改为 `100`。

   您可以看到如下示例数据：  
![\[屏幕截图显示了“数据预览”选项卡。\]](http://docs.amazonaws.cn/glue/latest/dg/images/streaming-tutorial-1e.png)

   您还可以在**输出架构**选项卡中查看推断的架构。  
![\[屏幕截图显示了“输出架构”选项卡。\]](http://docs.amazonaws.cn/glue/latest/dg/images/streaming-tutorial-1f.png)

### 执行转换并将转换后的结果存储在 Amazon S3 中


1. 选中源节点后，单击左上角的加号图标添加一个**转换**步骤。

1. 选择**更改架构**步骤。  
![\[屏幕截图显示了添加节点对话框。\]](http://docs.amazonaws.cn/glue/latest/dg/images/streaming-tutorial-1g.png)

1. 在此步骤中，您可以重命名字段并转换字段的数据类型。将 `o2stats` 列重命名为 `OxygenSaturation`，并将所有 `long` 数据类型转换为 `int`。  
![\[屏幕截图显示了“转换”选项卡。\]](http://docs.amazonaws.cn/glue/latest/dg/images/streaming-tutorial-1h.png)

1. 单击加号图标添加一个 **Amazon S3** 目标。在搜索框中输入 S3，然后选择 **Amazon S3 – 目标**转换步骤。  
![\[屏幕截图显示了“添加节点”选项卡。\]](http://docs.amazonaws.cn/glue/latest/dg/images/streaming-tutorial-1i.png)

1. 选择 **Parquet** 作为目标文件格式。

1. 选择 **Snappy** 作为压缩类型。

1. 输入 CloudFormation 模板 `streaming-tutorial-s3-target-{AWS::AccountId}` 创建的 **S3 目标位置**。

1. 选择**在数据目录中创建表，在后续运行中更新架构并添加新分区**。

1. 输入目标**数据库**和**表**名称以存储 Amazon S3 目标表的架构。  
![\[屏幕截图显示了 Amazon S3 目标的配置页面。\]](http://docs.amazonaws.cn/glue/latest/dg/images/streaming-tutorial-1j.png)

1. 单击**脚本**选项卡查看生成的代码。

1. 单击右上角的**保存**以保存 ETL 代码，然后单击**运行**以启动 Amazon Glue 流式处理作业。

   您可以在**运行**选项卡中找到**运行状态**。让作业运行 3-5 分钟，然后停止作业。  
![\[屏幕截图显示了“运行”选项卡。\]](http://docs.amazonaws.cn/glue/latest/dg/images/streaming-tutorial-1k.png)

1. 验证在 Amazon Athena 中创建的新表。  
![\[屏幕截图显示了 Amazon Athena 中的表。\]](http://docs.amazonaws.cn/glue/latest/dg/images/streaming-tutorial-1l.png)