Только для текстовых файлов и HDFS как источника и назначения, используйте следующую команду:
hadoop fs -cat /input_hdfs_dir/* | hadoop fs -put - /output_hdfs_file
Это объединит все файлы в input_hdfs_dir
и запишетвывод обратно в HDFS на output_hdfs_file
.Помните, что все данные будут возвращены в локальную систему, а затем снова загружены в hdfs, хотя временные файлы не создаются, и это происходит на лету с использованием UNIX pe.
Кроме того, это выиграло 't работать с нетекстовыми файлами, такими как Avro, ORC и т. д.
Для двоичных файлов вы можете сделать что-то вроде этого (если у вас есть таблицы Hive, сопоставленные с каталогами):
insert overwrite table tbl select * from tbl
В зависимости от вашей конфигурации, это может также создать больше, чем файлы.Чтобы создать отдельный файл, либо установите число редукторов равным 1, явно используя mapreduce.job.reduces=1
, либо установите свойство улья как hive.merge.mapredfiles=true
.