DynamoDB 佈建輸送量 - Amazon DynamoDB

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

DynamoDB 佈建輸送量

在針對外部 DynamoDB 資料表發出 HiveQL 陳述式時,DynamoDBStorageHandler 類別會產生適當的低階 DynamoDB API 請求 (這些請求會消耗佈建的輸送量)。如果 DynamoDB 資料表上的讀取或寫入容量不足,則會對請求進行調節,繼而導致 HiveQL 效能緩慢。因此,您應該確保資料表擁有足夠的輸送容量。

例如,假設您已為 DynamoDB 資料表佈建 100 單位的讀取容量。這將讓您每秒讀取 409,600 個位元組 (100 × 4 KB 讀取容量單位大小)。現在假設資料表包含 20 GB 的資料 (21,474,836,480 個位元組),而且您想要使用 SELECT 陳述式來選擇使用 HiveQL 的所有資料。您可以估計查詢執行需要多長時間,如下所示:

「21,474,836,480 / 409,600 = 52,429 秒 = 14.56 小時」

在此案例中,DynamoDB 資料夾是瓶頸。這將無助於新增更多 Amazon EMR 節點,因為 Hive 輸送量限制為每秒只有 409,600 個位元組。減少 SELECT 陳述式所需時間的唯一方法,是增加 DynamoDB 資料表佈建的讀取容量。

您可以執行類似的計算,估計將大量載入資料帶入映射至 DynamoDB 資料表之 Hive 外部資料表所需的時間。決定每個項目所需的寫入容量單位總數 (小於 1KB = 1、1-2KB = 2,以此類推),並將其乘以要載入的項目數。這將為您提供所需的寫入容量單位數目。將該數目除以每秒配置的寫入容量單位數目。這將產生載入資料表所需的秒數。

您應該定期監視表格的 CloudWatch 指標。如需在 DynamoDB 主控台取得快速概觀,請選擇您的資料表,然後選擇 Metrics (指標) 索引標籤。您可以從此處檢視已耗用的讀取和寫入容量單位,以及已調節的讀取和寫入請求。

讀取容量

Amazon EMR 會根據資料表佈建輸送量設定,管理您的 DynamoDB 資料表的請求負載。不過,如果在任務輸出中發現大量的 ProvisionedThroughputExceeded 訊息,您可以調整預設讀取率。若要執行此操作,您可以修改 dynamodb.throughput.read.percent 組態變數。您可以使用 SET 命令在 Hive 命令提示字元中設定此變數:

SET dynamodb.throughput.read.percent=1.0;

此變數僅持續用於目前的 Hive 工作階段。如果您退出 Hive 並於之後返回查看,dynamodb.throughput.read.percent 會傳回其預設值。

dynamodb.throughput.read.percent 的值可能介於 0.11.5 (含) 之間。0.5 代表預設讀取率,表示 Hive 會嘗試使用資料表一半的讀取容量。如果將值增加到 0.5 以上,Hive 會增加請求率;如果將值減少到 0.5 以下,則會降低讀取請求率。(根據不同因素,例如在 DynamoDB 資料表中是否有統一金鑰分佈等,實際讀取率可能會有所不同。)

如果您注意到 Hive 經常耗盡資料表的佈建讀取容量,或者如果讀取請求調節過多,請嘗試將 dynamodb.throughput.read.percent 減少到 0.5 以下。如果資料表有足夠的讀取容量,並且您想要提升 HiveQL 作業的回應能力,則可以將值設定在 0.5 以上。

寫入容量

Amazon EMR 會根據資料表佈建輸送量設定,管理您的 DynamoDB 資料表的請求負載。不過,如果在任務輸出中發現大量的 ProvisionedThroughputExceeded 訊息,您可以調整預設寫入率。若要執行此操作,您可以修改 dynamodb.throughput.write.percent 組態變數。您可以使用 SET 命令在 Hive 命令提示字元中設定此變數:

SET dynamodb.throughput.write.percent=1.0;

此變數僅持續用於目前的 Hive 工作階段。如果您退出 Hive 並於之後返回查看,dynamodb.throughput.write.percent 會傳回其預設值。

dynamodb.throughput.write.percent 的值可能介於 0.11.5 (含) 之間。0.5 代表預設寫入率,表示 Hive 會嘗試使用資料表一半的寫入容量。如果將值增加到 0.5 以上,Hive 會增加請求率;如果將值減少到 0.5 以下,則會降低寫入請求率。(根據不同因素,例如在 DynamoDB 資料表中是否有統一金鑰分佈等,實際寫入率可能會有所不同。)

如果您注意到 Hive 經常耗盡資料表的佈建寫入容量,或者如果寫入請求調節過多,請嘗試將 dynamodb.throughput.write.percent 減少到 0.5 以下。如果資料表有足夠的容量,並且您想要提升 HiveQL 作業的回應能力,則可以將值設定在 0.5 以上。

在使用 Hive 將資料寫入 DynamoDB 時,請確認寫入容量單位數大於叢集中的映射器數量。例如,考慮使用由 10 個 m1.xlarge 節點的 Amazon EMR 叢集。此 m1.xlarge 節點類型提供 8 個映射器任務,因此叢集總共有 80 個映射器 (10 × 8)。如果 DynamoDB 資料表的寫入容量單位少於 80 個,則 Hive 寫入作業可能會耗用該資料表的所有寫入輸送量。

若要判斷 Amazon EMR 節點類型的映射器數目,請參閱《Amazon EMR 開發人員指南》中的任務組態

如需映射器的詳細資訊,請參閱 調整映射器