MSCK の最適化 - Amazon EMR

MSCK の最適化

Hive は各テーブルのパーティションのリストをメタストアに保存します。ただし、パーティションがファイルシステムに直接追加されたり、ファイルシステムに削除されたりしても、Hive メタストアはこれらの変更を認識しません。MSCK コマンドは、ファイルシステムに直接追加または削除されたパーティションの Hive メタストア内のパーティションメタデータを更新します。コマンドの構文は次のとおりです。

MSCK [REPAIR] TABLE table_name [ADD/DROP/SYNC PARTITIONS];

Hive はこのコマンドを以下のように実装しています。

  1. Hive はテーブルのすべてのパーティションをメタストアから取得します。次に、ファイルシステムに存在しないパーティションパスのリストから、メタストアから削除するパーティションのリストを作成します。

  2. Hive はファイルシステムに存在するパーティションパスを収集し、メタストアにあるパーティションのリストと比較し、メタストアに追加する必要のあるパーティションのリストを生成します。

  3. Hive は、ADDDROP、または SYNC モードを使用してメタストアを更新します。

注記

メタストアに多数のパーティションがある場合、ファイルシステムの exists API 呼び出しはパーティションごとに行う必要があるため、ファイルシステムにパーティションが存在しないかどうかを確認するステップの実行には時間がかかります。

Amazon EMR 6.5.0 では、Hive に hive.emr.optimize.msck.fs.check というフラグが導入されました。このフラグを有効にすると、Hive はファイルシステム API 呼び出しを行う代わりに、上記のステップ 2 で生成されたファイルシステムのパーティションパスのリストからパーティションの有無を確認します。Amazon EMR 6.8.0 では、Hive はこの最適化をデフォルトで有効にしたため、フラグ hive.emr.optimize.msck.fs.check を設定する必要がなくなりました。