翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
考慮事項
Apache Spark または Apache Hive で DynamoDB コネクタを使用する場合、これらの動作と制限に注意してください。
Apache Spark で DynamoDB コネクタを使用する場合の考慮事項
-
Spark SQLは、ストレージハンドラーオプションを使用した Hive テーブルの作成をサポートしていません。詳細については、Apache Spark ドキュメントの「Specifying storage format for Hive tables
」を参照してください。 -
Spark SQLは、ストレージハンドラーによる
STORED BY
オペレーションをサポートしていません。外部の Hive テーブル経由で DynamoDB テーブルとやり取りする場合は、まず Hive を使用してテーブルを作成します。 -
クエリを DynamoDB クエリに変換するには、DynamoDB コネクタは述語プッシュダウンを使用します。述語プッシュダウンは、DynamoDB テーブルのパーティションキーにマッピングされた列でデータをフィルタリングします。述語のプッシュダウンは、Spark でコネクタを使用する場合にのみ動作しSQL、 では動作しません MapReduce API。
Apache Hive で DynamoDB コネクタを使用する場合の考慮事項
マッパーの最大数の調整
-
SELECT
クエリを使用して DynamoDB にマッピングする外部 Hive テーブルからデータを読み取る場合、EMRServerless のマップタスクの数は、DynamoDB テーブルに設定された合計読み取りスループットをマップタスクあたりのスループットで割ったものとして計算されます。マップタスクあたりのデフォルトのスループットは 100 です。 -
Hive ジョブは、DynamoDB 用に設定された読み取りスループットに応じて、EMRサーバーレスアプリケーションごとに設定されたコンテナの最大数を超えるマップタスクの数を使用できます。また、長時間実行される Hive クエリは、DynamoDB テーブルのプロビジョニングされた読み込みキャパシティをすべて消費できます。これは他のユーザーに悪影響を及ぼします。
-
dynamodb.max.map.tasks
プロパティを使用して、マップタスクの上限を設定することができます。このプロパティを使用して、タスクコンテナのサイズに基づいて、各マップタスクによって読み込まれるデータの量を調整することもできます。 -
dynamodb.max.map.tasks
プロパティは、Hive クエリレベル、または start-job-run コマンドのhive-site
分類で設定できます。この値は、1 以上にする必要があります。Hive がクエリを処理する際に実行される Hive ジョブは、DynamoDB テーブルからの読み込み時、dynamodb.max.map.tasks
の値を超えるタスクを使用することはありません。
タスクあたりの書き込みスループットの調整
-
EMR Serverless のタスクあたりの書き込みスループットは、DynamoDB テーブルに設定された書き込みスループットの合計を、
mapreduce.job.maps
プロパティの値で割って計算されます。Hive の場合、このプロパティのデフォルト値は 2 です。したがって、Hive ジョブの最終ステージで最初の 2 つのタスクは、すべての書き込みスループットを消費できます。これにより、同じジョブや他のジョブで他のタスクの書き込みがスロットリングされます。 -
書き込みのスロットリングを回避するには、最終ステージのタスク数またはタスクごとに割り当てる書き込みスループットに基づいて
mapreduce.job.maps
プロパティの値を設定します。EMR Serverless の start-job-run コマンドのmapred-site
分類でこのプロパティを設定します。