AWS Glue クローラーが長時間実行されるのはなぜですか?

最終更新日: 2019 年 9 月 24 日

AWS Glue クローラーが数時間以上実行されていますが、まだデータストア内のスキーマを特定できていません。クローラーに時間がかかっているのはなぜですか? また、どのように高速化できますか?

簡単な説明

クローラーの実行時間が長くなる一般的な原因は、以下のとおりです。

  • 新しいデータの頻繁な追加: 最初のクローラーの実行中に、クローラーは各ファイルの最初のメガバイトを読み取り、スキーマを推測します。 後続のクローラーの実行中に、クローラーはターゲット内のファイル (最初の実行中にクロールされたファイルを含む) をリストし、新しいファイルの最初のメガバイトを読み取ります。クローラーは、以前のクローラーの実行で読み取られたファイルを読み取りません。つまり、後続のクローラーの実行がより高速になることがよくあります。ただし、クローラーの実行の間にデータストアに多数のファイルまたはフォルダを追加すると、実行時間は毎回長くなります。
  • 圧縮ファイルのクローリング : 圧縮ファイルのクロールには時間がかかります。これは、クローラーが最初のメガバイトを読み取るかファイルをリストする前に、ファイルをダウンロードして解凍する必要があるためです。
    注意: Apache Parquet、Apache Avro、Apache Orc ファイルの場合、クローラーは最初のメガバイトをクロールしません。代わりに、クローラーは各ファイルに保存されたメタデータを読み取ります。

解決方法

トラブルシューティングを開始する前に、クローラーを実行する必要があるかどうかを検討します。AWS Glue データカタログでテーブルを作成し、ETL ジョブまたは Amazon Athena などのダウンストリームサービスでテーブルを使用する必要がない限り、クローラーを実行する必要はありません。ETL ジョブでは、from_options を使用してデータストアから直接データを読み取り、DynamicFrame で変換を使用できます。これを行う場合、ETL パイプラインでクローラーは必要ありません。クローラーがユースケースに適していると判断した場合は、以下の方法の 1 つ以上を使用してクローラーの実行時間を短縮します。

除外パターンを使用する

除外パターンは、特定のファイルまたはパスをスキップするようにクローラーに指示します。除外パターンは、クローラーがリストする必要のあるファイルの数を減らします。これは、クローラーの実行が高速になることを意味します。たとえば、除外パターンを使用して、すでにクロールされているメタファイルやファイルを除外します。除外パターンの例を含む詳細については、パターンを含める、および除外するを参照してください。

複数のクローラーを実行する

データストア全体で 1 つのクローラーを実行する代わりに、複数のクローラーを実行することを検討してください。複数のクローラを短時間実行することは、1 つのクローラーを長時間実行するよりも優れています。たとえば、年単位でデータをパーティション分割し、各パーティションに大量のデータが含まれているとします。各パーティション (各年) で異なるクローラーを実行すると、クローラーはより速く終了します。

小さなファイルを結合して大きなファイルを作成する

少数の大きなファイルをクロールするよりも、多数の小さなファイルをクロールする方が時間がかかります。これは、クローラーが各ファイルをリストし、新しい各ファイルの最初のメガバイトを読み取る必要があるためです。