

# AWS Glue Streaming 自動スケーリング
<a name="glue-streaming-auto-scaling"></a>

AWS Glue ストリーミング ETL ジョブは、ストリーミングソースからのデータを継続的に消費し、転送中のデータをクリーンアップおよび変換して、分析できるようにします。ジョブ実行の各ステージをモニタリングすることで、AWS Glue 自動スケーリングは、ワーカーがアイドル状態のときにワーカーをオフにしたり、追加の並列処理が可能な場合はワーカーを追加したりできます。

 以下のセクションでは、AWS Glue Streaming 自動スケーリングについて説明します。

## AWS Glue Studio の Auto Scaling を有効にする
<a name="auto-scaling-enabling"></a>

AWS Glue Studio の **[Job details]** (ジョブ詳細) タブで、タイプに **[Spark]** または **[Spark Streaming]** を選択し、**[Glue version]** (Glue バージョン) には [**Glue 3.0**] もしくは [**Glue 4.0**] を選択します。次に、**[Worker type]** (ワーカータイプ) の下にチェックボックスが表示されます。
+ **[Automatically scale the number of workers]** (ワーカー数を自動的にスケーリングする) を選択します。
+ **ワーカーの最大数**を設定して、ジョブ実行に投入できるワーカーの最大数を定義します。

![AWS Glue スタジオで Auto Scaling を有効にし、設定する。](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/auto-scaling-enable-studio.png)


## AWS CLI または SDK を使用した Auto Scaling の有効化
<a name="auto-scaling-enabling-cli-sdk"></a>

Auto Scaling を有効にするには、ジョブ実行の AWS CLI から、次の設定で `start-job-run` を実行します。

```
{
    "JobName": "<your job name>",
    "Arguments": {
        "--enable-auto-scaling": "true"
    },
    "WorkerType": "G.2X", // G.1X, G.2X, G.4X, G.8X, G.12X, G.16X, R.1X, R.2X, R.4X, and R.8X are supported for Auto Scaling Jobs
    "NumberOfWorkers": 20, // represents Maximum number of workers
    ...other job run configurations...
}
```

ETL ジョブ実行が終了したら、`get-job-run` を呼び出して、実行されたジョブの実際のリソース使用量を DPU 秒単位で確認することもできます。注: 新しいフィールド **[DPUSeconds]** は、Auto Scaling が有効になっている AWS Glue 3.0 以降のパッチジョブに対してのみ表示されます。このフィールドは、ストリーミングジョブではサポートされません。

```
$ aws glue get-job-run --job-name your-job-name --run-id jr_xx --endpoint https://glue.us-east-1.amazonaws.com --region us-east-1
{
    "JobRun": {
        ...
        "GlueVersion": "3.0",
        "DPUSeconds": 386.0
    }
}
```

同じ設定で [AWS Glue SDK ](https://docs.aws.amazon.com/glue/latest/webapi/API_StartJobRun.html) を使用して、Auto Scaling でジョブ実行を設定することもできます。

## 仕組み
<a name="auto-scaling-how-it-works"></a>

 **マイクロバッチ全体のスケーリング** 

 次の例を使用して、自動スケーリングの仕組みを説明します。
+ 50 DPU から始まる AWS Glue ジョブがあります。
+ 自動スケーリングが有効になっています。

 この例では、AWS Glue は、いくつかのマイクロバッチの「batchProcessingTimeInMs」メトリクスを確認し、設定されたウィンドウサイズ内でジョブが完了するかどうかを判断します。ジョブがすぐに完了する場合は、その完了するまでの時間によっては AWS Glue がスケールダウンすることもあります。「numberAllExecutors」でプロットされたこのメトリクスを Amazon CloudWatch でモニタリングして、自動スケーリングがどのように機能するかを確認できます。

 エグゼキュターの数は、マイクロバッチが完了するたびに指数関数的にスケールアップまたはスケールダウンします。Amazon CloudWatch モニタリングログからわかるように、AWS Glue は、必要なエグゼキュターの数 (オレンジ色の線) を確認し、それに合わせてエグゼキュター (青い線) を自動的にスケーリングしています。

![このスクリーンショットは、上記の例の Amazon CloudWatch モニタリングのログの、AWS Glue を示しています。必要なエグゼキュターの数 (オレンジ色の線) を参照し、手動で調整する必要なく、それに合わせてエグゼキュターをスケールします (青色の線)。](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/glue-autoscaling-scaling-across-microbatch.png)


 AWS Glue がエグゼキュターの数をスケールダウンし、データ量が増加してマイクロバッチ処理時間が長くなることに気付くと、AWS Glue が指定された上限である 50 DPU にスケールアップします。

 **マイクロバッチ内でのスケーリング** 

 上記の例では、システムが、完了したいくつかのマイクロバッチをモニタリングして、スケールアップするかスケールダウンするかを決定しています。ウィンドウが長くなると、いくつかのマイクロバッチを待つよりも、自動スケーリングがマイクロバッチ内で速く応答する必要になります。このような場合は、追加の設定 `--auto-scaIe-within-microbatch` を `true` に指定して使用できます。以下に示すように、これを AWS Glue Studio で AWS Glue ジョブプロパティに追加できます。

![このスクリーンショットには、キーと値のジョブパラメータが表示されています。[キー] フィールドには値 --auto-scaIe-within-microbatch が含まれ、[値] フィールドには値 true が含まれています。](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/glue-autoscaling-job-parameters-studio.png)
