web-dev-qa-db-fra.com

Comment mettre à jour les métadonnées de partition dans Hive, lorsque les données de partition sont supprimées manuellement de HDFS

Comment mettre à jour automatiquement les métadonnées des tables partitionnées Hive?

Si de nouvelles données de partition ont été ajoutées à HDFS (sans modifier la table, ajoutez l'exécution de la commande de partition). nous pouvons ensuite synchroniser les métadonnées en exécutant la commande "msck repair".

Que faire si un grand nombre de données partitionnées ont été supprimées de HDFS (sans l'exécution de l'exécution de la commad de la partition drop table alter).

Comment synchroniser les métadonnées Hive?

24
vinu.m.19

[~ # ~] modifier [~ # ~] : à partir de Hive 3.0.0 MSCK peut désormais découvrir de nouvelles partitions ou supprimer des partitions manquantes (ou les deux) en utilisant la syntaxe suivante:

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

Cela a été implémenté dans Hive-17824


Comme correctement indiqué par HakkiBuyukcengiz , MSCK REPAIR Ne supprime pas les partitions si le dossier correspondant sur HDFS a été supprimé manuellement, il n'ajoute des partitions que si de nouveaux dossiers le sont créé .

Extrait de l'officiel documentation :

En d'autres termes, il ajoutera toutes les partitions qui existent sur HDFS mais pas dans le métastore au métastore.

C'est ce que je fais habituellement en présence de tables external si plusieurs dossiers de partitions sont supprimés manuellement sur HDFS et que je souhaite rafraîchir rapidement les partitions:

  • Supprimez la table (DROP TABLE table_name) (La suppression d'une table externe ne supprime pas les fichiers de partition sous-jacents)
  • Recréez la table (CREATE EXTERNAL TABLE table_name ...)
  • Réparez-le (MSCK REPAIR TABLE table_name)

Selon le nombre de partitions, cela peut prendre du temps. L'autre solution consiste à utiliser ALTER TABLE DROP PARTITION (...) pour chaque dossier de partition supprimé, mais cela peut être fastidieux si plusieurs partitions ont été supprimées.

30
cheseaux

Essayez d'utiliser

MSCK REPAIR TABLE <tablename>;
16
Carter Shanklin

Assurez-vous que la table est définie sur externe, supprimez toutes les partitions, puis exécutez la réparation de la table:

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


Si la réparation msck génère une erreur, exécutez Hive à partir du terminal en tant que:
Hive --hiveconf Hive.msck.path.validation=ignore
ou set Hive.msck.path.validation=ignore;

1
Leo103