

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

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

Amazon EMR 叢集可使用 Hive、Pig、MapReduce、Hadoop Streaming API 和 Cascading 等 Hadoop 生態系統內常見的工具，直接讀取與處理 Amazon Kinesis 串流。另外，您也可以將 Amazon Kinesis 的即時資料與執行中叢集內的 Amazon S3、Amazon DynamoDB 和 HDFS 上的現有資料互相聯結。您可以直接將資料從 Amazon EMR 載入 Amazon S3 或 DynamoDB，以供後續處理活動使用。如需有關 Amazon Kinesis 服務特色和定價的資訊，請參閱 [Amazon Kinesis](https://aws.amazon.com//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://aws.amazon.com/elasticmapreduce/faqs/#kinesis-connector)。

如果對反覆運算設定了檢查點且作業處理反覆運算失敗，則 Amazon EMR 會嘗試重新處理該反覆運算中的記錄。

設置檢查點的功能能夠：
+ 開始處理在上一次在相同串流和邏輯名稱上執行的查詢所處理過的序號後的資料
+ 重新處理 Kinesis 先前由更早的查詢處理過的相同資料批次

 若要啟用設置檢查點功能，請在指令碼中將 `kinesis.checkpoint.enabled` 參數設為 `true`。還可以設定以下參數：


| 組態設定 | Description | 
| --- | --- | 
| 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 串流上的資料時，會受到任何反覆運算的逾時和最大期間的限制，因此定期執行分析相當重要，如此才能從串流中定期收集詳細資訊。有很多方式能夠以定期間隔執行這類指令碼和查詢，我們推薦使用 AWS Data Pipeline 處理這類重複的任務。如需詳細資訊，請參閱《AWS Data Pipeline 開發人員指南》**中的 [AWS Data Pipeline PigActivity](https://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-object-pigactivity.html) 和 [AWS Data Pipeline HiveActivity](https://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-object-hiveactivity.html)。