Pour les fichiers texte uniquement et HDFS comme source et destination, utilisez la commande suivante :
hadoop fs -cat /input_hdfs_dir/* | hadoop fs -put - /output_hdfs_file
Cela concaténera tous les fichiers de la section input_hdfs_dir
et écrira la sortie sur HDFS à output_hdfs_file
. Gardez à l'esprit que toutes les données seront ramenées sur le système local puis à nouveau téléchargées vers hdfs, bien qu'aucun fichier temporaire ne soit créé et que cela se passe à la volée en utilisant UNIX pe.
En outre, cela ne fonctionnera pas avec les fichiers non textuels tels que Avro, ORC, etc.
Pour les fichiers binaires, vous pourriez faire quelque chose comme ceci (si vous avez des tables Hive mappées sur les répertoires) :
insert overwrite table tbl select * from tbl
En fonction de votre configuration, cela pourrait également créer plus que des fichiers. Pour créer un seul fichier, il faut soit définir le nombre de réducteurs à 1 explicitement en utilisant mapreduce.job.reduces=1
ou définir la propriété de la ruche comme hive.merge.mapredfiles=true
.