Как работает Hadoop-getmerge?

в описании Hadoop getmerge

использование: hdfs dfs-getmerge src localdst [addnl]

мой вопрос в том, почему getmerge конкатенируется к местному месту назначения, почему не сам hdfs ? Этот вопрос был задан потому что у меня есть следующие проблемы

  1. Что делать,если файлы для объединения больше, чем размер локального?
  2. есть ли какая-либо конкретная причина ограничения команды hadoop-getmerge только на конкатенация к местному назначению?

1 ответов


The была создана специально для объединения файлов из HDFS в один файл в локальной файловой системе.

эта команда очень полезна для загрузки вывода задания MapReduce, которое могло создать несколько файлов part-* и объединить их в один файл локально, который вы можете использовать для других операций (например, поместить его в лист Excel для презентации).

ответы на ваши вопросы:

  1. если в целевой файловой системе недостаточно места, затем создается исключение IOException. The getmerge внутренне использует IOUtils.copyBytes() (см. IOUtils.copyBytes ()) функция для копирования одного файла за раз из HDFS в локальный файл. Эта функция выбрасывает IOException всякий раз, когда есть ошибка в операции копирования.

  2. эта команда находится в аналогичных строках, как hdfs fs -get команда, которая получает файл из HDFS в локальную файловую систему. Единственная разница -hdfs fs -getmerge объединяет несколько файлов из HDFS для локальной файловой системы.

если вы хотите объединить несколько файлов в HDFS, вы можете достичь его с помощью copyMerge() метод FileUtil класса (см. FileUtil.copyMerge ()).

этот API копирует все файлы в каталоге в один файл (объединяет все исходные файлы).