web-dev-qa-db-ja.com

HFSでパーティションデータを手動でHDFSから削除したときにパーティションメタデータを更新する方法

Hiveパーティションテーブルのメタデータを自動的に更新する方法は何ですか?

新しいパーティションデータがHDFSに追加された場合(alter table add partitionコマンドの実行なし)。次に、コマンド 'msck repair'を実行してメタデータを同期できます。

HDFSから多数のパーティション分割されたデータが削除された場合に実行すること(alter table drop partitionのコンマ実行を実行しない場合)。

Hiveメタデータを同期する方法は何ですか?

24
vinu.m.19

[〜#〜] edit [〜#〜]Hive 3.0.0MSCKは、次の構文を使用して、新しいパーティションを検出したり、欠落しているパーティション(またはその両方)を削除したりできるようになりました。

_MSCK [REPAIR] TABLE table_name [ADD/DROP/SYNC PARTITIONS]
_

これは Hive-17824 で実装されました


HakkiBuyukcengiz で正しく述べられているように、_MSCK REPAIR_は、HDFS上の対応するフォルダーが手動で削除された場合、パーティションを削除せず、新しいフォルダーがの場合にのみパーティションを追加します作成しました

公式からの抽出 ドキュメント

つまり、HDFSには存在するがメタストアには存在しないパーティションをメタストアに追加します。

これは、HDFSで複数のパーティションフォルダーを手動で削除し、パーティションをすばやく更新したい場合に、externalテーブルがある場合に通常行うことです。

  • テーブルを削除します(_DROP TABLE table_name_)(外部テーブルを削除しても、基になるパーティションファイルは削除されません)
  • テーブルを再作成します(_CREATE EXTERNAL TABLE table_name ..._)
  • 修復する(_MSCK REPAIR TABLE table_name_)

パーティションの数によっては、これに時間がかかる場合があります。もう1つの解決策は、削除されたパーティションフォルダごとにALTER TABLE DROP PARTITION (...)を使用することですが、複数のパーティションが削除された場合、これは面倒な場合があります。

30
cheseaux

使ってみてください

MSCK REPAIR TABLE <tablename>;
16
Carter Shanklin

テーブルが外部に設定されていることを確認し、すべてのパーティションを削除してから、テーブルの修復を実行します。

alter table mytable_name set TBLPROPERTIES('EXTERNAL'='TRUE')
alter table mytable_name drop if exists partition (`mypart_name` <> 'null');
msck repair table mytable_name;


msck修復でエラーがスローされた場合は、次のようにターミナルからHiveを実行します。
Hive --hiveconf Hive.msck.path.validation=ignore
またはset Hive.msck.path.validation=ignore;

1
Leo103