本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
考量事項
當您搭配 Apache Spark 或 Apache Hive 使用 DynamoDB 連接器時,請注意這些行為和限制。
搭配 Apache Spark 使用 DynamoDB 連接器時的考量
-
Spark SQL 不支援使用儲存處理器選項建立 Hive 資料表。如需詳細資訊,請參閱 Apache Spark 文件中的指定 Hive 資料表的儲存格式
。 -
Spark SQL 不支援使用儲存處理器
STORED BY
的操作。如果您想要透過外部 Hive 資料表與 DynamoDB 資料表互動,請先使用 Hive 建立資料表。 -
若要將查詢轉換為 DynamoDB 查詢,DynamoDB 連接器會使用述詞下推。述詞下推依對應至 DynamoDB 資料表分割區索引鍵的資料欄篩選資料。述詞下推功能只會在您將連接器與 Spark 搭配使用時運作SQL,而不會與 搭配使用 MapReduce API。
搭配 Apache Hive 使用 DynamoDB 連接器時的考量事項
調校映射器的最大數量
-
如果您使用
SELECT
查詢從對應至 DynamoDB 的外部 Hive 資料表讀取資料,EMR則 Serverless 上的映射任務數量會計算為為為 DynamoDB 資料表設定的讀取總傳輸量,除以每個映射任務的傳輸量。每個映射任務的預設輸送量為 100。 -
Hive 任務可以使用超過每個無EMR伺服器應用程式所設定容器數量上限的映射任務數量,取決於為 DynamoDB 設定的讀取輸送量。此外,長時間執行的 Hive 查詢可能會消耗 DynamoDB 資料表的所有佈建讀取容量。這會對其他使用者造成負面影響。
-
您可以使用
dynamodb.max.map.tasks
屬性來設定映射任務的上限。您也可以使用此屬性,根據任務容器大小來調整每個映射任務讀取的資料量。 -
您可以在 Hive 查詢層級或在 start-job-run命令的
hive-site
分類中設定dynamodb.max.map.tasks
屬性。此數值必須等於或大於 1。當 Hive 處理您的查詢時,產生的 Hive 任務使用的值不會超過從 DynamoDB 資料表讀取dynamodb.max.map.tasks
時的值。
調整每個任務的寫入輸送量
-
EMR 在 Serverless 上,每個任務的寫入輸送量計算方式為為 DynamoDB 資料表設定的總寫入輸送量,除以
mapreduce.job.maps
屬性的值。對於 Hive,此屬性的預設值為 2。因此,Hive 任務最後階段的前兩個任務可以使用所有寫入輸送量 。這會導致調節相同任務或其他任務中其他任務的寫入。 -
若要避免寫入限流,您可以根據最後一個階段的任務數量或每個任務要配置的寫入輸送量來設定
mapreduce.job.maps
屬性的值。在無EMR伺服器start-job-run命令的mapred-site
分類中設定此屬性。