Копирование данных из локальной файловой системы в HDFS
Ниже представлен процесс копирования любых данных из локальной файловой системы в файловую систему Hadoop. Для этого сервис HDFS предоставляет специальную команду hdfs dfs -put
согласно следующему синтаксису:
$ hdfs dfs -put <source_path> <destination_path>
ПРИМЕЧАНИЕ
Путь назначения должен указывать на каталог. |
Для получения всех аргументов этой команды введите в терминале hdfs dfs -put
.
Для копирования файлов с данными из локальной файловой системы в HDFS следуйте дальнейшим шагам:
-
Убедитесь, что файл с данными, например file1.txt, доступен в локальной файловой системе, например в вашем домашнем каталоге:
$ ls -a ~
Вывод на консоль приведен ниже:
. .. .ansible .bash_history .bash_logout .bash_profile .bashrc file1.txt .ssh test
-
Проверьте содержимое корневого каталога HDFS:
$ hdfs dfs -ls /
Вывод на консоль приведен ниже:
Found 6 items -rw-r--r-- 3 hdfs hadoop 20 2021-10-07 13:34 /hadoop drwxrwxrwt - yarn hadoop 0 2021-09-15 16:58 /logs drwxr-xr-x - hdfs hadoop 0 2021-10-12 13:17 /staging drwxr-xr-x - hdfs hadoop 0 2021-09-15 16:57 /system drwxrwxrwx - hdfs hadoop 0 2021-10-20 09:00 /tmp drwxr-xr-x - hdfs hadoop 0 2021-09-27 12:24 /user
-
Создайте отдельный каталог в HDFS для копирования в него файлов, например:
$ hdfs dfs -mkdir /how_to_example
Обычно, если вы работаете как ординарный пользователь, HDFS возвращает сообщение об ошибке следующего содержания:
mkdir: Permission denied: user=user_name, access=WRITE, inode="/user user_name":centos:centos:drwxr-xr-x
Обычный пользователь не имеет права на запись в корневой каталог HDFS.
-
Для преодоления этого ограничения выполните требуемые команды, используя последовательно привилегии пользователей
root
иhdfs
. Для этого прежде всего получите эти привилегии:$ sudo -s $ su - hdfs
ВНИМАНИЕПользоваться привилегиями
root
небезопасно. Используйте их только при необходимости. -
Используя привилегии пользователя
hdfs
, повторите попытку создания нового каталога с названием hdfsDirectory и убедитесь, что эта операция завершилась успешно:$ hdfs dfs -mkdir /hdfsDirectory $ hdfs dfs -ls /
Вывод на консоль приведен ниже:
Found 7 items -rw-r--r-- 3 hdfs hadoop 20 2021-10-07 13:34 /hadoop drwxr-xr-x - hdfs hadoop 0 2021-11-18 13:35 /hdfsDirectory drwxrwxrwt - yarn hadoop 0 2021-09-15 16:58 /logs drwxr-xr-x - hdfs hadoop 0 2021-10-12 13:17 /staging drwxr-xr-x - hdfs hadoop 0 2021-09-15 16:57 /system drwxrwxrwx - hdfs hadoop 0 2021-10-20 09:00 /tmp drwxr-xr-x - hdfs hadoop 0 2021-09-27 12:24 /user
-
Назначьте вашего обычного пользователя, например
admin
, владельцем нового каталога:$ hdfs dfs -chown admin /hdfsDirectory $ hdfs dfs -ls /
Вывод на консоль приведен ниже:
Found 7 items -rw-r--r-- 3 hdfs hadoop 20 2021-10-07 13:34 /hadoop drwxr-xr-x - admin hadoop 0 2021-11-18 13:35 /hdfsDirectory drwxrwxrwt - yarn hadoop 0 2021-09-15 16:58 /logs drwxr-xr-x - hdfs hadoop 0 2021-10-12 13:17 /staging drwxr-xr-x - hdfs hadoop 0 2021-09-15 16:57 /system drwxrwxrwx - hdfs hadoop 0 2021-10-20 09:00 /tmp drwxr-xr-x - hdfs hadoop 0 2021-09-27 12:24 /user
Теперь ваш обычный пользователь является владельцем каталога для приема файлов. Вернитесь в контекст этого пользователя:
$ exit $ exit
-
Скопируйте файл file1.txt из локальной файловой системы в каталог HDFS и проверьте, что этот файл появился в каталоге назначения. Используйте команду
put
илиcopyFromLocal
:$ hdfs dfs -copyFromLocal ~/file1.txt /hdfsDirectory $ hdfs dfs -ls /hdfsDirectory/file1.txt
Вывод на консоль приведен ниже:
-rw-r--r-- 3 admin hadoop 29 2021-11-18 14:01 /hdfsDirectory/file1.txt
-
Назначьте право записи в каталог /hdfsDirectory для всех пользователей, если вам необходимо, чтобы все они могли копировать данные в этот каталог:
$ hdfs dfs -chmod 777 /hdfsDirectory
Любой пользователь, имеющий доступ к HDFS, теперь может копировать свои файлы и каталоги с файлами в этот каталог.
Выполнив представленные выше шаги, вы успешно скопировали файл file1.txt в HDFS а также обеспечили обычным пользователям право копировать их файлы в определенный каталог HDFS.