Как работает Hadoop-getmerge?
в описании Hadoop getmerge
использование: hdfs dfs-getmerge src localdst [addnl]
мой вопрос в том, почему getmerge конкатенируется к местному месту назначения, почему не сам hdfs ? Этот вопрос был задан потому что у меня есть следующие проблемы
- Что делать,если файлы для объединения больше, чем размер локального?
- есть ли какая-либо конкретная причина ограничения команды hadoop-getmerge только на конкатенация к местному назначению?
1 ответов
The была создана специально для объединения файлов из HDFS в один файл в локальной файловой системе.
эта команда очень полезна для загрузки вывода задания MapReduce, которое могло создать несколько файлов part-* и объединить их в один файл локально, который вы можете использовать для других операций (например, поместить его в лист Excel для презентации).
ответы на ваши вопросы:
если в целевой файловой системе недостаточно места, затем создается исключение IOException. The
getmerge
внутренне используетIOUtils.copyBytes()
(см. IOUtils.copyBytes ()) функция для копирования одного файла за раз из HDFS в локальный файл. Эта функция выбрасываетIOException
всякий раз, когда есть ошибка в операции копирования.эта команда находится в аналогичных строках, как
hdfs fs -get
команда, которая получает файл из HDFS в локальную файловую систему. Единственная разница -hdfs fs -getmerge
объединяет несколько файлов из HDFS для локальной файловой системы.
если вы хотите объединить несколько файлов в HDFS, вы можете достичь его с помощью copyMerge()
метод FileUtil
класса (см. FileUtil.copyMerge ()).
этот API копирует все файлы в каталоге в один файл (объединяет все исходные файлы).