У меня есть две настройки HDFS и я хочу скопировать (не переносить и не перемещать) некоторые таблицы из HDFS1 в HDFS2. Как скопировать данные из одной HDFS в другую HDFS? Это возможно через Sqoop или другую командную строку?
Как скопировать данные из одной HDFS в другую HDFS?
Ответ 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, но они используются только тогда, когда объем данных меньше.