Как скопировать данные из одной HDFS в другую HDFS?

У меня есть две настройки HDFS и я хочу скопировать (не переносить и не перемещать) некоторые таблицы из HDFS1 в HDFS2. Как скопировать данные из одной HDFS в другую HDFS? Это возможно через Sqoop или другую командную строку?

Ответ 1

DistCp (распределенная копия) - это инструмент, используемый для копирования данных между кластерами. Он использует MapReduce для осуществления его распространения, обработки ошибок и восстановления, а также отчетов. Он расширяет список файлов и каталогов во входные данные для задач карты, каждый из которых копирует раздел файлов, указанных в исходном списке.

Использование: $ hadoop distcp <src> <dst>

пример: $ hadoop distcp hdfs://nn1:8020/file1 hdfs://nn2:8020/file2

file1 из nn1 копируется в nn2 с именем файла file2

Distcp - лучший инструмент на данный момент. Sqoop используется для копирования данных из реляционной базы данных в HDFS и наоборот, но не между HDFS и HDFS.

Дополнительная информация:

Доступны две версии: производительность выполнения в distcp2 больше по сравнению с distcp

Ответ 2

Hadoop поставляется с полезной программой под названием distcp для копирования больших объемов данных в и из файловых систем Hadoop параллельно. Канонический вариант использования для distcp предназначен для передачи данных между двумя кластерами HDFS. Если в кластерах работают одинаковые версии hadoop, тогда целесообразно использовать схему hdfs.

$ hadoop distcp hdfs://namenode1/foo hdfs://namenode2/bar

Данные в каталоге /foo namenode1 будут скопированы в /bar каталог namenode2. Если каталог /bar не существует, он создаст его. Также мы можем упомянуть несколько путей источника.

Как и команда rsync, команда distcp по умолчанию пропускает уже существующие файлы. Мы также можем использовать опцию -overwrite для перезаписывания существующих файлов в целевом каталоге. Опция -update будет обновлять только те файлы, которые были изменены.

$ hadoop distcp -update hdfs://namenode1/foo hdfs://namenode2/bar/foo

distcp также может быть реализована как задание MapReduce, где работа копирования выполняется картами, которые выполняются параллельно по кластеру. Редукторов не будет.

При попытке скопировать данные между двумя кластерами HDFS, которые работают с разными версиями, обработка копии завершится неудачей, поскольку системы RPC несовместимы. В этом случае нам нужно использовать файловые системы HFTP на основе HTTP только для чтения, чтобы читать их из источника. Здесь задание должно выполняться на целевом кластере.

$ hadoop distcp hftp://namenode1:50070/foo hdfs://namenode2/bar

50070 - это номер порта по умолчанию для встроенного веб-сервера наменования.

Ответ 3

distcp используется для копирования данных в файловую систему hadoop параллельно и из нее. Он похож на общую команду hadoop fs -cp. В фоновом процессе distcp реализуется как задание MapReduce, где mappers реализованы только для копирования параллельно по кластеру.

Применение:

  • копировать один файл в другой

    % hadoop distcp file1 file2

  • копировать каталоги из одного места в другое

    % hadoop distcp dir1 dir2

Если dir2 не существует, он создаст эту папку и скопирует содержимое. Если dir2 уже существует, то под ним будет скопировано dir1. Параметр -overwrite заставляет файлы перезаписываться в одной папке. Параметр -update обновляет только файлы, которые были изменены.

  • передача данных между двумя кластерами HDFS

    % hadoop distcp -update -delete hdfs://nn1/dir1 hdfs://nn2/dir2

Параметр

-delete удаляет файлы или каталоги из адресата, отсутствующего в источнике.

Ответ 4

Попробуйте dtIngest, он был создан поверх Apache Apex платформа. Этот инструмент копирует данные из разных источников, таких как HDFS, общий диск, NFS, FTP, Kafka в разные пункты назначения. Копирование данных из удаленного кластера HDFS в локальный кластер HDFS поддерживается dtIngest. dtIngest запускает пряжу, чтобы копировать данные параллельно, так что это очень быстро. Он заботится о работе с отказами, восстановлении и т.д. И периодически поддерживает каталоги опроса, чтобы сделать непрерывную копию.

Использование: dtingest [OPTION]... SOURCEURL... DESTINATIONURL Пример: dtingest hdfs://nn1: 8020/source hdfs://nn2: 8020/dest

Ответ 5

Также полезно отметить, что вы можете запускать базовые задания MapReduce с исходным или целевым кластером следующим образом:

hadoop --config /path/to/hadoop/config distcp <src> <dst>

Ответ 6

Команда distcp используется для параллельного копирования из одного кластера в другой. Вы должны установить путь для namenode из src и путь для namenode из dst, внутренне он использует mapper.

Пример:

$ hadoop distcp <src> <dst>

Есть несколько вариантов, которые вы можете установить для distcp

-m для нет. картографа для копирования данных это увеличит скорость копирования.

-atomic для автоматической фиксации данных.

-update будет обновлять только те данные, которые есть в старой версии.

Существуют общие команды для копирования файлов в hadoop: -cp и -put, но они используются только тогда, когда объем данных меньше.