Копирование данных из локальной файловой системы в HDFS

Ниже представлен процесс копирования любых данных из локальной файловой системы в файловую систему Hadoop. Для этого сервис HDFS предоставляет специальную команду hdfs dfs -put согласно следующему синтаксису:

$ hdfs dfs -put <source_path> <destination_path>
ПРИМЕЧАНИЕ

Путь назначения должен указывать на каталог.

Для получения всех аргументов этой команды введите в терминале hdfs dfs -put.

Для копирования файлов с данными из локальной файловой системы в HDFS следуйте дальнейшим шагам:

  1. Убедитесь, что файл с данными, например file1.txt, доступен в локальной файловой системе, например в вашем домашнем каталоге:

    $ ls -a ~

    Вывод на консоль приведен ниже:

    .  ..  .ansible  .bash_history  .bash_logout  .bash_profile  .bashrc  file1.txt  .ssh  test
  2. Проверьте содержимое корневого каталога 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
  3. Создайте отдельный каталог в 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.

  4. Для преодоления этого ограничения выполните требуемые команды, используя последовательно привилегии пользователей root и hdfs. Для этого прежде всего получите эти привилегии:

    $ sudo -s
    $ su - hdfs
    ВНИМАНИЕ

    Пользоваться привилегиями root небезопасно. Используйте их только при необходимости.

  5. Используя привилегии пользователя 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
  6. Назначьте вашего обычного пользователя, например 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
  7. Скопируйте файл 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
  8. Назначьте право записи в каталог /hdfsDirectory для всех пользователей, если вам необходимо, чтобы все они могли копировать данные в этот каталог:

    $ hdfs dfs -chmod 777 /hdfsDirectory

    Любой пользователь, имеющий доступ к HDFS, теперь может копировать свои файлы и каталоги с файлами в этот каталог.

Выполнив представленные выше шаги, вы успешно скопировали файл file1.txt в HDFS а также обеспечили обычным пользователям право копировать их файлы в определенный каталог HDFS.

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней