

# 教程：使用 AWS Glue Studio 笔记本构建第一个流工作负载
<a name="streaming-tutorial-studio-notebooks"></a>

在本教程中，您将探索如何利用 AWS Glue Studio 笔记本以交互方式构建和优化 ETL 作业，以实现近乎实时的数据处理。无论您是刚接触 AWS Glue，还是想提高自己的技能，本指南都将引导您完成整个过程，让您能够充分利用 AWS Glue 交互式会议笔记本的潜力。

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

## 先决条件
<a name="streaming-tutorial-studio-notebooks-prereqs"></a>

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

## 使用来自 Amazon Kinesis 的流式处理数据
<a name="streaming-tutorial-studio-notebooks-kinesis"></a>

**Topics**
+ [使用 Kinesis Data Generator 生成模拟数据](#streaming-tutorial-studio-notebooks-kinesis-generate-data)
+ [使用 AWS Glue Studio 创建 AWS Glue 流式处理作业](#streaming-tutorial-studio-notebooks-kinesis-create-job)
+ [清理](#streaming-tutorial-studio-notebooks-clean)
+ [结论](#streaming-tutorial-studio-notebooks-conclusion)

### 使用 Kinesis Data Generator 生成模拟数据
<a name="streaming-tutorial-studio-notebooks-kinesis-generate-data"></a>

**注意**  
如果您已经完成了之前的 [教程：使用 AWS Glue Studio 构建第一个流式处理工作负载](streaming-tutorial-studio.md)，您的账户中已经安装了 Kinesis Data Generator，则可以跳过下面的步骤 1-8，继续阅读第 [使用 AWS Glue Studio 创建 AWS Glue 流式处理作业](#streaming-tutorial-studio-notebooks-kinesis-create-job) 节。

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

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

   该模板已经预置了一个 Kinesis 数据流和一个 Kinesis Data Generator 账户。

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 万条记录。

### 使用 AWS Glue Studio 创建 AWS Glue 流式处理作业
<a name="streaming-tutorial-studio-notebooks-kinesis-create-job"></a>

AWS Glue Studio 是一个可视化界面，可简化设计、编排和监控数据集成管道的过程。它使用户无需编写大量代码即可构建数据转换管道。除了可视化作业创作体验外，AWS Glue Studio 还提供了一个由 AWS Glue 交互式会话支持的 Jupyter notebook，您将在本教程的剩余部分中使用它。

#### 设置 AWS Glue 流式处理交互式会话作业
<a name="streaming-tutorial-studio-kinesis-create-job-interactive-sessions"></a>

1. 下载提供的[笔记本文件](https://aws-data-analytics-workshops.s3.amazonaws.com/aws_glue/aws_glue_streaming/docs/glue_streaming_tutorial_notebook.ipynb)并保存到本地目录

1. 打开 AWS Glue 控制台，在左窗格中单击**笔记本** > **Jupyter Notebook** > **上传并编辑现有笔记本**。上传上一步中的笔记本，然后单击**创建**。  
![屏幕截图显示了创建 Jupyter Notebook 作业。](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/streaming-tutorial-2a.png)

1. 为作业提供名称和角色并选择默认的 Spark 内核。然后单击**启动笔记本**。对于 **IAM 角色**，选择 CloudFormation 模板预置的角色。您可以在 CloudFormation 的**输出**选项卡中看到它。  
![屏幕截图显示了笔记本设置对话框。](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/streaming-tutorial-2b.png)

笔记本上有继续本教程的所有必要说明。您可以在笔记本上运行说明，也可以按照本教程继续进行作业开发。

#### 运行笔记本单元格
<a name="streaming-tutorial-studio-kinesis-create-job-notebook-cells"></a>

1. （可选）第一个代码单元格 `%help` 列出了所有可用的笔记本魔术命令。您可以暂时跳过这个单元格，但可以随意探索它。

1. 从下一个代码块 `%streaming` 开始。这个魔法命令将作业类型设置为流式处理，以便您可以开发、调试和部署 AWS Glue 流式处理 ETL 作业。

1. 运行下一个单元格以创建 AWS Glue 交互式会话。输出单元格中有一条消息，用于确认会话创建。  
![屏幕截图显示了开始交互式会话。](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/streaming-tutorial-2c.png)

1. 下一个单元格定义了变量。将值替换为适合您作业的值，然后运行单元格。例如：  
![屏幕截图显示了在交互式会话中定义变量。](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/streaming-tutorial-2d.png)

1. 由于数据已流送到 Kinesis Data Streams，您的下一个单元将使用来自该流的结果。运行下一个单元格。由于没有打印语句，该单元格没有预期的输出。

1. 在下面的单元格中，您可以通过采集样本集探索传入流，并打印其架构和实际数据。例如：  
![屏幕截图显示了在交互式会话中采样和打印传入记录。](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/streaming-tutorial-2e.png)

1. 接下来，定义实际的数据转换逻辑。该单元由在每个微批次期间触发的 `processBatch` 方法组成。运行单元格。总的来说，我们对传入流执行以下操作：

   1. 选择输入列的子集。

   1. 重命名列（将 o2stats 重命名为 oxygen\_stats）。

   1. 衍生新列（serial\_identifier、ingest\_year、ingest\_month 和 ingest\_day）。

   1. 将结果存储到 Amazon S3 存储桶中，并创建一个分区的 AWS Glue 目录表

1. 在最后一个单元格中，每 10 秒触发一次批处理。运行单元格，等待约 30 秒，让它填充 Amazon S3 存储桶和 AWS Glue 目录表。

1. 最后，使用 Amazon Athena 查询编辑器浏览存储的数据。您可以看到重命名的列和新分区。  
![屏幕截图显示了在 Amazon Athena 查询编辑器中浏览存储的数据。](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/streaming-tutorial-2f.png)

笔记本上有继续本教程的所有必要说明。您可以在笔记本上运行说明，也可以按照本教程继续进行作业开发。

#### 保存并运行 AWS Glue 作业
<a name="streaming-tutorial-studio-kinesis-create-job-save"></a>

使用交互式会话笔记本完成应用程序的开发和测试后，单击笔记本界面顶部的**保存**。保存后，您还可以将应用程序作为作业运行。

![屏幕截图显示了将笔记本另存为 AWS Glue 作业。](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/streaming-tutorial-2g.png)


### 清理
<a name="streaming-tutorial-studio-notebooks-clean"></a>

为了避免您的账户产生额外费用，请停止按照说明启动的流式处理作业。您可以停止笔记本完成此操作，这将结束会话。清空 Amazon S3 存储桶并删除您之前预置的 AWS CloudFormation 堆栈。

### 结论
<a name="streaming-tutorial-studio-notebooks-conclusion"></a>

在本教程中，我们演示了如何使用 AWS Glue Studio 笔记本执行以下操作
+ 使用笔记本创作流式处理 ETL 作业
+ 预览传入数据流
+ 无需发布 AWS Glue 作业即可编写代码和修复问题
+ 查看端到端工作代码，删除所有调试，并从笔记本中打印语句或单元格
+ 将代码发布为 AWS Glue 作业

本教程旨在让您亲身体验如何使用 AWS Glue 流式处理和交互式会话。我们建议您在您个人的 AWS Glue 流式处理用例中参考本教程中的内容。有关更多信息，请参阅 [开始使用 AWS Glue 交互式会话](interactive-sessions.md)。