Кто-то подскажет мне, какое лучшее решение для отправки файлов из разных источников и сохранения их в hdfs на основе их имен. Моя ситуация: у меня есть сервер с большим количеством файлов, и мне нужно отправить их в HDFS. На самом деле я использовал flume, в его конфигурации я пробовал spooldir и ftp в качестве источников, но оба они имеют недостатки.
Итак, есть идеи, как это сделать?
как отправлять файлы в hdfs, сохраняя их базовое имя
Ответы (1)
Используйте команду Hadoop put:
поставить
Использование: hadoop fs -put [-f] [-p] [-l] [-d] [- | ..].
Скопируйте один src или несколько src из локальной файловой системы в целевую файловую систему. Также считывает ввод со стандартного ввода и записывает в целевую файловую систему, если для источника установлено значение «-».
Копирование завершается ошибкой, если файл уже существует, если только не задан флаг -f.
Параметры:
-p : Сохраняет время доступа и модификации, владельца и разрешения. (при условии, что разрешения могут распространяться по файловым системам)
-f : перезаписывает пункт назначения, если он уже существует.
-l : Разрешить DataNode лениво сохранять файл на диск. Задает коэффициент репликации, равный 1. Этот флаг приведет к снижению надежности. Используйте с осторожностью.
-d : пропустить создание временного файла с расширением .КОПИРОВАНИЕ.
Примеры:
hadoop fs -put localfile /user/hadoop/hadoopfile
hadoop fs -put -f локальный файл1 локальный файл2 /пользователь/hadoop/hadoopdir
hadoop fs -put -d локальный файл hdfs://nn.example.com/hadoop/hadoopfile
hadoop fs -put - hdfs://nn.example.com/hadoop/hadoopfile Считывает ввод со стандартного ввода.
Код выхода:
Возвращает 0 в случае успеха и -1 в случае ошибки.
https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/FileSystemShell.html#put