

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# MSCK の最適化
<a name="emr-msck-optimization"></a>

Hive は各テーブルのパーティションのリストをメタストアに保存します。ただし、パーティションがファイルシステムに直接追加されたり、ファイルシステムに削除されたりしても、Hive メタストアはこれらの変更を認識しません。[MSCK コマンド](https://cwiki.apache.org/confluence/display/hive/languagemanual+ddl#LanguageManualDDL-RecoverPartitions(MSCKREPAIRTABLE))は、ファイルシステムに直接追加または削除されたパーティションの Hive メタストア内のパーティションメタデータを更新します。コマンドの構文は次のとおりです。

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

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

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

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

1. Hive は、`ADD`、`DROP`、または `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` を設定する必要がなくなりました。