

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Kinesis
<a name="emr-kinesis"></a>

亚马逊 EMR 集群可以使用 Hadoop 生态系统中熟悉的工具（例如 Hive、Pig、Hadoop Streaming API 和 Cascading MapReduce）直接读取和处理 Amazon Kinesis 直播。您还可以将 Amazon Kinesis 中的实时数据与正在运行的集群中 Amazon S3、Amazon DynamoDB 和 HDFS 上的现有数据进行连接。您可以直接将 Amazon EMR 中的数据加载到 Amazon S3 或 DynamoDB 来进行后处理。有关 Amazon Kinesis 服务亮点和定价的信息，请参阅 [Amazon Kinesis](https://www.amazonaws.cn//kinesis) 页面。

## 可以对 Amazon EMR 和 Amazon Kinesis 集成执行哪些操作？
<a name="kinesis-use-cases"></a>

 Amazon EMR 和 Amazon Kinesis 之间的集成使某些方案更简单，例如：
+ **流式处理日志分析**：您可以分析流式处理 Web 日志，以便每隔几分钟按区域、浏览器和访问域生成前 10 个错误类型的列表。
+ **客户参与**：您可以编写查询将 Amazon Kinesis 中的点击流数据与存储在 DynamoDB 表中的广告活动信息进行连接，以确定显示在特定网站上的最有效广告类别。
+ **即席交互式查询**：您可以定期将 Amazon Kinesis 流中的数据加载到 HDFS 中，并以本地 Impala 表的形式提供该数据以进行快速的交互式分析查询。

## 对 Amazon Kinesis 流进行检查点分析
<a name="kinesis-checkpoint"></a>

用户可以定期对 Amazon Kinesis 流进行批量分析，这些分析称为*迭代*。因为使用序列号检索 Amazon Kinesis 流数据记录，所以，可通过 Amazon EMR 在 DynamoDB 表中存储的开始和结束序列号来定义迭代边界。例如，当 `iteration0` 结束时，它在 DynamoDB 中存储结束序列号，这样在 `iteration1` 作业开始时，它可以检索流的后续数据。迭代在流数据中的这种映射称为*检查点操作*。有关更多信息，请参阅 [Kinesis 连接器](https://www.amazonaws.cn/elasticmapreduce/faqs/#kinesis-connector)。

如果对迭代进行了检查点操作且作业未能处理某个迭代，则 Amazon EMR 会尝试重新处理该迭代中的记录。

通过检查点功能，您可以：
+ 从运行于相同的流和逻辑名称之上的前一个查询处理的序列号之后，开始数据处理
+ 重新处理 Kinesis 中由之前的查询处理的同一批数据

 要启用检查点操作，请在脚本中将 `kinesis.checkpoint.enabled` 参数设置为 `true`。此外，请配置以下参数：


| 配置设置 | 说明 | 
| --- | --- | 
| kinesis.checkpoint.metastore.table.name | 用于存储检查点信息的 DynamoDB 表名称 | 
| kinesis.checkpoint.metastore.hash.key.name | DynamoDB 表的哈希键名称 | 
| kinesis.checkpoint.metastore.hash.range.name | DynamoDB 表的范围键名称 | 
| kinesis.checkpoint.logical.name | 当前处理的逻辑名称 | 
| kinesis.checkpoint.iteration.no | 与逻辑名称关联的处理的迭代编号 | 
| kinesis.rerun.iteration.without.wait | 用来指示是否可以重新运行失败的迭代而不等待超时的布尔值；默认值为 false | 

### Amazon DynamoDB 表的预置 IOPS 建议
<a name="kinesis-checkpoint-DDB"></a>

Amazon Kinesis 的 Amazon EMR 连接器使用 DynamoDB 数据库作为对元数据进行检查点操作的支持。必须先在 DynamoDB 中创建表，才能以检查点时间间隔使用 Amazon EMR 集群的 Amazon Kinesis 流中的数据。该表必须与 Amazon EMR 集群位于相同区域中。以下是为您应当为 DynamoDB 表预置的 IOPS 数的一般建议；`j` 应当是可同时运行的最大 Hadoop 任务数（具有不同的逻辑名称\+迭代编号组合），`s` 是任何作业将处理的最大分片数：

对于 **Read Capacity Units**：`j`\*`s`/`5`

对于 **Write Capacity Units**：`j`\*`s`

## 性能注意事项
<a name="performance"></a>

Amazon Kinesis 分片吞吐量与 Amazon EMR 集群中节点的实例大小以及流中的记录大小成正比。建议在主节点和核心节点上使用 m5.xlarge 或更大的实例。

## 借助 Amazon EMR 安排 Amazon Kinesis 分析
<a name="schedule"></a>

如果要对活动 Amazon Kinesis 流分析数据，由于任何迭代都受超时和最长持续时间限制，您应经常运行分析，以便从流定期收集详细信息，这十分重要。可以通过多种方式定期执行该类脚本和查询；但建议针对此类周期性任务使用 Amazon Data Pipeline 。有关更多信息，请参阅《*Amazon Data Pipeline 开发人员指南*》[Amazon Data Pipeline HiveActivity](https://docs.amazonaws.cn/datapipeline/latest/DeveloperGuide/dp-object-hiveactivity.html)中的[Amazon Data Pipeline PigActivity](https://docs.amazonaws.cn/datapipeline/latest/DeveloperGuide/dp-object-pigactivity.html)和。