AWS Glue クローラーが長時間実行されるのはなぜですか?
最終更新日: 2021 年 8 月 31 日
AWS Glue クローラーが数時間以上実行されていますが、まだデータストア内のスキーマを特定できていません。
簡単な説明
クローラーの実行時間が長くなる一般的な原因は、以下のとおりです。
- 新しいデータの頻繁な追加: 最初のクローラーの実行中に、クローラーは各ファイルの最初のメガバイトを読み取り、スキーマを推測します。後続のクローラーの実行中に、クローラーは、最初の実行中にクローリングされたファイルを含むターゲット内のファイルをリストし、新しいファイルの最初のメガバイトを読み取ります。クローラーは、以前のクローラーの実行で読み取られたファイルを読み取りません。つまり、後続のクローラーの実行がより高速になることがよくあります。これは、増分クローリング機能によるものです (有効になっている場合)。このオプションを使用すると、クローラーは後続のクローリング実行時にのみ新しいデータを読み取ります。ただし、クローラーの実行の間にデータストアに多数のファイルまたはフォルダを追加すると、実行時間は毎回長くなります。
圧縮ファイルのクローリング : 圧縮ファイルのクローリングには時間がかかります。これは、クローラーが最初のメガバイトを読み取るかファイルをリストする前に、ファイルをダウンロードして解凍する必要があるためです。
注意: Apache Parquet、Apache Avro、Apache Orc ファイルの場合、クローラーは最初のメガバイトをクロールしません。代わりに、クローラーは各ファイルに保存されたメタデータを読み取ります。
解決方法
トラブルシューティングを開始する前に、クローラーを実行する必要があるかどうかを検討します。AWS Glue データカタログでテーブルを作成し、抽出、変換、ロード (ETL) ジョブまたは Amazon Athena などのダウンストリームサービスでテーブルを使用する必要がない限り、クローラーを実行する必要はありません。ETL ジョブでは、from_options を使用してデータストアから直接データを読み取り、DynamicFrame で変換を使用できます。これを行う場合、ETL パイプラインでクローラーは必要ありません。クローラーがユースケースに適していると判断した場合は、以下の方法の 1 つ以上を使用してクローラーの実行時間を短縮します。
除外パターンを使用する
除外パターンは、特定のファイルまたはパスをスキップするようにクローラーに指示します。除外パターンは、クローラーがリストする必要のあるファイルの数を減らします。これにより、クローラーの実行が高速になります。例えば、除外パターンを使用して、既にクローリングされているメタファイルやファイルを除外します。除外パターンの例を含む詳細については、包含パターンと除外パターンを参照してください。
サンプルサイズ機能を使用する
AWS Glue クローラーは、サンプルサイズ機能をサポートしています。この機能を使用すると、データセット内のサンプルファイルをクローリングするときにクローリングする各リーフフォルダ内のファイル数を指定できます。この機能をオンにすると、クローラーは、データセット内のすべてのファイルをクローリングする代わりに、各リーフフォルダ内のいくつかのファイルをランダムに選択してクローリングします。データ形式に関する知識があり、フォルダ内のスキーマが変更されないことがわかっている場合は、サンプリングクローラーを使用します。この機能をオンにすると、クローラーの実行時間が大幅に短縮されます。
複数のクローラーを実行する
データストア全体で 1 つのクローラーを実行する代わりに、複数のクローラーを実行することを検討してください。複数のクローラを短時間実行することは、1 つのクローラーを長時間実行するよりも優れています。例えば、年単位でデータをパーティション分割し、各パーティションに大量のデータが含まれているとします。各パーティション (各年) で異なるクローラーを実行すると、クローラーはより速く完了します。
小さなファイルを結合して大きなファイルを作成する
少数の大きなファイルをクローリングするよりも、多数の小さなファイルをクローリングする方が時間がかかります。これは、クローラーが各ファイルをリストし、新しい各ファイルの最初のメガバイトを読み取る必要があるためです。