

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

# 使用 Amazon EMR 在 DynamoDB 中匯出、匯入、查詢和聯結資料表
<a name="EMRforDynamoDB"></a>

**注意**  
Amazon EMR-DynamoDB 連接器是 GitHub 上的開放原始碼。如需詳細資訊，請參閱 [https://github.com/awslabs/emr-dynamodb-connector](https://github.com/awslabs/emr-dynamodb-connector)。

DynamoDB 是全受管 NoSQL 資料庫服務，提供快速且可預期的效能，以及無縫的可擴展性。開發人員可建立資料庫資料表，不受限制地增加請求流量或儲存空間。DynamoDB 會自動將資料表的資料與傳輸流分散到足夠數量的伺服器上，以因應客戶所指定的請求處理容量和儲存的資料量，同時保持快速、一致的效能。透過 Amazon EMR 和 Hive，您可以迅速且有效地處理大量資料，例如儲存在 DynamoDB 中的資料。如需有關 DynamoDB 的詳細資訊，請參閱 [Amazon DynamoDB 開發人員指南](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/)。

Apache Hive 為軟體層的一種，可使用 HiveQL 這種類似 SQL 的簡化查詢語言來對 Map Reduce 叢集進行查詢。其是在 Hadoop 架構上執行。如需有關 Hive 與 HiveQL 的詳細資訊，請參閱 [HiveQL 語言手冊](https://cwiki.apache.org/confluence/display/Hive/LanguageManual)。如需有關 Hive 與 Amazon EMR 的詳細資訊，請參閱 [Apache Hive](emr-hive.md)。

您可以將 Amazon EMR 與具有 DynamoDB 連線能力的 Hive 自訂版本搭配使用，對儲存在 DynamoDB 中的資料執行下列操作：
+ 將 DynamoDB 資料載入 Hadoop 分散式檔案系統 (HDFS)，並將其作為 Amazon EMR 叢集的輸入。
+ 使用 SQL 式的陳述式 (HiveQL) 查詢即時 DynamoDB 資料。
+ 聯結儲存在 DynamoDB 內的資料並將之匯出，或對已聯結的資料進行查詢。
+ 將儲存在 DynamoDB 中的資料匯出至 Amazon S3。
+ 將儲存在 Amazon S3 中的資料匯入至 DynamoDB。

**注意**  
Amazon EMR-DynamoDB 連接器不支援設定為使用 [Kerberos 身分驗證](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-kerberos.html)的叢集。

若要執行以下各項任務，您必須啟動 Amazon EMR 叢集並指定資料在 DynamoDB 中的位置，然後發出 Hive 命令，藉此控制 DynamoDB 內的資料。

有多種方式可以啟動 Amazon EMR 叢集：您可以使用 Amazon EMR 主控台、命令列界面 (CLI)，也可以使用 AWS SDK 或 Amazon EMR API 來編寫叢集的程式。您也可以選擇要以互動方式執行 Hive 叢集，或是以指令碼執行。在本章節中，我們會示範如何從 Amazon EMR 主控台和 CLI 啟動互動式的 Hive 叢集。

以互動方式使用 Hive 相當適合用於查詢效能的測試和應用程式的微調工作。建立好一組會定期執行的 Hive 命令後，可以考慮建立能交由 Amazon EMR 執行的 Hive 指令碼。

**警告**  
Amazon EMR 在 DynamoDB 資料表上的讀取或寫入操作會影響佈建的輸送量，這有可能會導致佈建輸送量出現例外狀況的頻率上升。處理大量請求時，Amazon EMR 會採取指數退避的策略進行重試，以管理 DynamoDB 資料表上的請求負載。與其他流量同時執行 Amazon EMR 作業，可能會導致超出所分配的佈建的輸送量。您可以在 Amazon CloudWatch 中檢查 **ThrottleRequests (ThrottleRequests)** 指標，藉此監控輸送量。在請求負載過高的情況下，您可以重新啟動叢集，並將 [讀取百分比設定](EMR_Hive_Optimizing.md#ReadPercent) 或 [寫入百分比設定](EMR_Hive_Optimizing.md#WritePercent) 設定為較低的值，進而調節 Amazon EMR 操作。如需有關 DynamoDB 輸送量設定的資訊，請參閱[佈建輸送量](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithDDTables.html#ProvisionedThroughput)。  
如果資料表設定為[隨需模式](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ReadWriteCapacityMode.html#HowItWorks.OnDemand)，您應先將資料表變更回佈建模式，然後再執行匯出或匯入操作。管道需要輸送量比率，才能計算 DynamoDBtable 中要使用的資源。隨需模式會移除佈建輸送量。若要佈建輸送容量，您可以使用 Amazon CloudWatch Events 指標來評估資料表已使用的彙總輸送量。

**Topics**
+ [設定 Hive 資料表以執行 Hive 命令](EMR_Interactive_Hive.md)
+ [在 DynamoDB 中匯出、匯入和查詢資料的 Hive 命令範例](EMR_Hive_Commands.md)
+ [優化 DynamoDB 中的 Amazon EMR 操作效能](EMR_Hive_Optimizing.md)