web-dev-qa-db-fra.com

comment fusionner plusieurs fichiers de parquet en un seul fichier de parquet à l'aide de la commande linux ou hdfs?

J'ai plusieurs petits fichiers parquet générés en sortie du travail Hive ql, je souhaite fusionner les fichiers de sortie en un seul fichier de parquet?

quelle est la meilleure façon de le faire en utilisant un hdfs or linux commands?

nous avions l'habitude de fusionner les fichiers texte à l'aide de la commande cat, mais cela fonctionnera-t-il également pour le parquet? Pouvons-nous le faire en utilisant HiveQL lui-même lors de l'écriture de fichiers de sortie, comme avec la méthode repartition ou coalesc dans spark

8
Shankar

Selon cette https://issues.Apache.org/jira/browse/PARQUET-460 .__, vous pouvez maintenant télécharger le code source et compiler un parquet-tools intégré à la commande de fusion.

Java -jar ./target/parquet-tools-1.8.2-SNAPSHOT.jar merge /input_directory/
        /output_idr/file_name

Ou en utilisant un outil tel que https://github.com/stripe/herringbone

10
giaosudau

Vous pouvez également le faire en utilisant HiveQL lui-même, si votre moteur d'exécution est mapreduce

Vous pouvez définir un indicateur pour votre requête. Ainsi, Hive fusionnera de petits fichiers à la fin de votre travail:

SET Hive.merge.mapredfiles=true;

ou

SET Hive.merge.mapfiles=true;

si votre travail est un travail de carte seulement.

Ainsi, le travail Hive fusionnera automatiquement de nombreux petits fichiers de parquet en moins de gros fichiers. Vous pouvez contrôler le nombre de fichiers de sortie en ajustant le paramètre Hive.merge.size.per.task. Si vous voulez avoir un seul fichier, assurez-vous de lui attribuer une valeur toujours supérieure à la taille de votre sortie. Veillez également à ajuster Hive.merge.smallfiles.avgsize en conséquence. Définissez-le sur une valeur très basse si vous voulez vous assurer que Hive fusionne toujours les fichiers. Vous pouvez en savoir plus sur ces paramètres dans Hive documentation

3
jkukul