一緒にHiveを勉強します.MSCK命令でHiveパーティションを修復します.

4489 ワード

最近Hiveを使っていますが、バックアップデータの場合は、cpやmvコマンドを使ってデータをコピーしたり、私達が新しく作ったバックアップテーブルの下にデータをコピーしたりしています.パーティションテーブルでない場合は、上の操作の後、新しいバックアップテーブルは正常に使えますが、パーティションテーブルの場合は、一般的には、alter table add partitionコマンドを使用して、パーティション情報を新規作成のテーブルに追加し、パーティション情報を追加するごとに、alter table add partitionコマンドを実行します.パーティション数が少なくても良いですが、パーティション数が多い場合、特にパーティション数が50より大きい場合、alterコマンドを使用してパーティションを追加します.それは時間がかかることで、間違えやすいです.
幸いHiveはMSCK命令を提供しています.テーブルのパーティションを修復するために、Hive公式を見て、MCSK命令を紹介したらいいです.
Hivestors a list of partitions for each table in its metastore.If,however,new partitions are directly to HFS(say by using hadoop fs-put command),the metastorename ADD PARTTION command on each of the newly added partitions.However,users can run a metastore check command with the repair table option:MSCK REPAIR TABLE tablenamewhich will add metadata about partitions to the Hive metastore for partitions for which such Stit doesn't already exist.In other wods,it will add any partitions that exist HFS but not metastore.我我我不不不不想a provision to run MSCK REPAIIIRATABLE batttch to avooobome.By giving the configred batttttttttze for the propertyhive.msck.repair.batch.sizi it can run n the battttttttinternalllly.The dedededededededededeeeeeeeeeeeeeeeeeeeeeeeeeeeeedededededededededededededededededededefifififififififififififififififififififififififififistic MapReduce(EMR)'s version of Hive is:ALTER TABLEテーブル_name RECOVER PARTTIONS;Starting with Hive 1.3、MSCK will throw exceptions if directores with disallowed characters in partition values are found on HFS.Use hive.msck.path.validation setting on on the client to alter this bevior;「skyp」will simply sky the directores.「ignore」will try to create partitions anyway.This may or may not work.
Hiveは各テーブルのパーティション情報をmetastoreに保存します.Hadoop fs-putコマンドを通じて直接にパーティション情報をHFSに追加すると、metastoreはこれらの新たなパーティションを感知しません.name ADD PARTTION命令です.しかし、ユーザは、metastoreチェックコマンドMSCK REPAIR TABLE table_name;を実行してもよい.このコマンドは、パーティションに関するメタ情報をHive metastoreに追加する.これは、メタ情報がないパーティションについてのものである.言い換えれば、HFS上に存在するが、metastore上に存在しないパーティションをmetastoreに追加することである.
MSCKコマンドを使用すれば、ビッグダッタ17_を作成します.partitionテーブルは、いくつかのディレクトリのファイルをcpコマンドでbigdata 17にコピーします.partitionディレクトリの下で、show partitions bigdata 17を実行します.パーティションコマンドは、パーティションの情報が表示されません.
hive> show partitions bigdata17_partition;
OK
Time taken: 1.121 seconds
その後MSCK REPAIR TABLE bigdata 17_パーティーコマンドのパーティション追加:
hive> MSCK REPAIR TABLE bigdata17_partition;
18/10/11 17:27:15 WARN log: Updating partition stats fast for: bigdata17_partition;
18/10/11 17:27:15 WARN log: Updated size to 10124
18/10/11 17:27:15 WARN log: Updating partition stats fast for: bigdata17_partition;
18/10/11 17:27:15 WARN log: Updated size to 21234
18/10/11 17:27:15 WARN log: Updating partition stats fast for: bigdata17_partition;
18/10/11 17:27:15 WARN log: Updated size to 346783
18/10/11 17:27:15 WARN log: Updating partition stats fast for: bigdata17_partition;
18/10/11 17:27:15 WARN log: Updated size to 2532162
18/10/11 17:27:15 WARN log: Updating partition stats fast for: bigdata17_partition;
18/10/11 17:27:15 WARN log: Updated size to 2901198
18/10/11 17:27:15 WARN log: Updating partition stats fast for: bigdata17_partition;
18/10/11 17:27:15 WARN log: Updated size to 3129087
18/10/11 17:27:15 WARN log: Updating partition stats fast for: bigdata17_partition;
18/10/11 17:27:15 WARN log: Updated size to 23190876
OK
Partitions not in metastore:    bigdata17_partition;:dt=2018-09-15    bigdata17_partition;:dt=2018-09-16    bigdata17_partition;:dt=2018-09-17    bigdata17_partition;:dt=2018-09-18    bigdata17_partition;:dt=2018-09-19     bigdata17_partition;:dt=2018-09-20    bigdata17_partition;:dt=2018-09-21
Repair: Added partition to metastore bigdata17_partition;:dt=2018-09-15
Repair: Added partition to metastore bigdata17_partition;:dt=2018-09-16
Repair: Added partition to metastore bigdata17_partition;:dt=2018-09-17
Repair: Added partition to metastore bigdata17_partition;:dt=2018-09-18
Repair: Added partition to metastore bigdata17_partition;:dt=2018-09-19
Repair: Added partition to metastore bigdata17_partition;:dt=2018-09-20
Repair: Added partition to metastore bigdata17_partition;:dt=2018-09-21
Time taken: 0.613 seconds, Fetched 8 row(s)
上記の結果から、ビッグダッタ17_が確認されました.partitionテーブルのパーティション情報をHive metastoreに追加し、add partitionコマンドに比べて便利で効率的です.
ちょっと注意したいのですが、パーティションのディレクトリ構造は必ずpartition_に従います.name=partition_value/構造でなければ、msckは自動的にパーティションを追加できません.add partitionコマンドしか使用できません.