Amazon DynamoDB からの読み取り時または書き込み時に AWS Glue ETL ワークロードを最適化するにはどうすればよいですか?

最終更新日: 2021 年 8 月 16 日

AWS Glue の抽出、変換、ロード (ETL) ジョブを Amazon DynamoDB からの読み取りまたは書き込みのために最適化したいと考えています。

- または -

AWS Glue ETL ジョブで DynamoDB テーブルのスロットリング例外が発生します。

解決方法

DynamoDB テーブルからの読み取りまたは書き込みを行うための AWS Glue ETL ジョブを作成する前に、次の設定の更新を検討してください。これらの更新は、AWS Glue および DynamoDB のリソースの使用を最適化するのに役立ちます。

DynamoDB から読み取る

  • dynamodb.througput.read.percent: この設定変数は、使用する読み取り容量ユニット (RCU) の割合を示します。この変数のデフォルト値は 0.5 に設定されています。許容される値の範囲は 0.11.5 です。0.5 という値は、AWS Glue ジョブがテーブルの読み取り容量の半分を消費しようとしていることを示します。実際の読み取り率は、DynamoDB テーブルに均一なキー分布があるかどうかなどの要因によって異なります。
    この例を使用して、ジョブの概算実行時間を計算します。DynamoDB テーブルに 100 個の RCU をプロビジョニングしたとします。1 RCU で 4 KB のデータを読み取ることができます。100 RCU では毎秒 409,600 バイトの 100 回の読み取りを実行できます。テーブルに 20 GB(21,474,836,480 バイト)のデータがあり、dynamodb.througut.read.percent の値を 1.0 に設定したとします。これは、ジョブが 100% の RCU でフルテーブルスキャンを実行することを意味します。
    次に、ジョブの概算実行時間を次のように計算できます。
    テーブルのサイズ/秒あたりの読み取りバイト数 = 21,474,836,480/409,600 = 52,429 秒 = 14.56 時間
    ジョブの実行時間を短縮するには、dynamodb.througut.read.percent に適切な値を設定して、RCU の数を増やすことができます。詳細については、「読み取り容量」を参照してください。
    DynamoDB テーブルが大きい場合は、プロビジョニングモードではなく、テーブルのオンデマンド読み取り/書き込み容量モードを選択します。新しいテーブルを作成するときに、オンデマンド読み取り/書き込み容量モードを選択するか、既存のテーブルの [容量] タブでこの設定を更新できます。詳細については、「読み取り/書き込み容量モード」を参照してください。
  • dynamodb.splits: この接続オプションは、データの読み取り中にテーブルがパーティショニングされる分割の数を定義します。デフォルト値は 1 に設定されています。指定できる値の範囲は 11,000,0000 です。値 1 は、並列処理がないことを表します。この変数には高い値を設定するのがベストプラクティスです。達成できる並列処理の量は、AWS Glue ワーカータイプとそのジョブに設定されたワーカー数によって異なります。dynamodb.splits の値として使用できる numSlots を計算するには、"connectionType": "dynamodb""dynamodb.splits" の式をソースとして使用します。

DynamoDB に書き込む

  • dynamodb.througut.write.percent: この設定変数は、使用する書き込み容量ユニット (WCU) の割合を定義します。デフォルト値は 0.5 です。許容される値の範囲は 0.11.5 です。0.5 という値は、AWS Glue がテーブルの書き込み容量の半分を消費しようとすることを意味します。実際の書き込み率は、DynamoDB テーブルに均一なキー分布があるかどうかなどの要因によって異なります。ユースケースに基づいて、この変数の値を更新します。
    DynamoDB テーブルが大きい場合は、プロビジョニングモードではなく、テーブルのオンデマンド読み取り/書き込み容量モードを選択するのがベストプラクティスです。
    詳細については、シンクとして "connectionType": "dynamodb" の下の "dynamodb.throughput.write.percent" を参照してください。
  • dynamodb.output.numParallelTasks: この接続オプションは、DynamoDB に同時に書き込む並列タスクの数を定義します。これはオプションのパラメータであることに注意してください。このパラメータを指定しない場合、numParallelTasks の値は、numPartitionsnumSlots、および numExecutors に基づいて計算されます。この値は、dynamodb.output.numParallelTasks の値として使用できます。詳細な式については、シンクとして "connectionType": "dynamodb" の下の "dynamodb.output.numParallelTasks" を参照してください。

DynamoDB テーブルからの読み取りおよび書き込みの方法を示すコード例については、「コード例」を参照してください。


この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?