Ошибка “Нет такого файла или каталога” в copyFromLocal Hadoop

Вопрос или проблема

У меня есть следующий код из терминала команд Fedora:

[root@localhost python_code]# pwd
/root/python_code
[root@localhost python_code]# cd ..
[root@localhost ~]# ls
anaconda-ks.cfg  python_code
[root@localhost ~]# cd /usr/local
[root@localhost local]# ls
bin  games   hadoop-2.6.4.tar.gz  input        lib    libexec  sbin   src
etc  hadoop  include              jdk1.8.0_77  lib64  output   share
[root@localhost local]# cd hadoop
[root@localhost hadoop]# ls
bin  include  libexec      logs        README.txt  share
etc  lib      LICENSE.txt  NOTICE.txt  sbin
[root@localhost hadoop]# pwd
/usr/local/hadoop
[root@localhost hadoop]# bin/hdfs dfs -copyFromLocal /root/python_code/input_data.csv /usr/local/hadoop/input_localuser
copyFromLocal: `/usr/local/hadoop/input_localuser': Нет такого файла или каталога
[root@localhost hadoop]# ls
bin  include  libexec      logs        README.txt  share
etc  lib      LICENSE.txt  NOTICE.txt  sbin
[root@localhost hadoop]# mkdir input_localuser
[root@localhost hadoop]# ls
bin  include          lib      LICENSE.txt  NOTICE.txt  sbin
etc  input_localuser  libexec  logs         README.txt  share
[root@localhost hadoop]# bin/hdfs dfs -copyFromLocal /root/python_code/input_data.csv /usr/local/hadoop/input_localuser
copyFromLocal: `/usr/local/hadoop/input_localuser': Нет такого файла или каталога
[root@localhost hadoop]# bin/hdfs dfs -copyFromLocal /root/python_code/input_data.csv home/usr/local/hadoop/input_localuser
copyFromLocal: `home/usr/local/hadoop/input_localuser': Нет такого файла или каталога
[root@localhost hadoop]# pwd
/usr/local/hadoop
[root@localhost hadoop]# ls
bin  include          lib      LICENSE.txt  NOTICE.txt  sbin
etc  input_localuser  libexec  logs         README.txt  share
[root@localhost hadoop]#

Больше кода:

[root@localhost hadoop]# cd ~
[root@localhost ~]# ls
anaconda-ks.cfg  python_code
[root@localhost ~]# cd python_code
[root@localhost python_code]# ls
data_generator.py  input_data.csv  mapper_project.py  reducer_project.py
[root@localhost python_code]#

Как видно выше, моя директория python_code находится в корневой папке, и я пытаюсь скопировать файлы из этой папки в директорию input_localuser, которая находится внутри hadoop.

Но следующая команда выдает ошибку:

bin/hdfs dfs -copyFromLocal /root/python_code/input_data.csv /usr/local/hadoop/input_localuser
    copyFromLocal: `/usr/local/hadoop/input_localuser': Нет такого файла или каталога

Во-первых, ваша команда Hadoop, вероятно, неверна.

dfs -copyFromLocal ожидает два параметра: локальный файл (как вы указали) и URI Hadoop. Не так, как вы это указали, а путь к файлу.

С веб-страниц Hadoop:

Все команды оболочки FS принимают URI пути в качестве аргументов. Формат URI это
scheme://authority/path. Для HDFS схема – hdfs, а для локальной файловой системы схема – file. Схема и авторитет являются необязательными. Если не указано, используется схема по умолчанию, указанная в конфигурации. HDFS файл или директория, такие как /parent/child, могут быть указаны как hdfs://namenodehost/parent/child или просто как /parent/child (при условии, что ваша конфигурация настроена на указание hdfs://namenodehost).

Большинство команд в FS shell ведут себя как соответствующие команды Unix. Различия описаны для каждой из команд. Информация об ошибках отправляется в stderr, а вывод – в stdout.

Я не знаю структуру вашей инстанции Hadoop, но ваша цель должна основываться на этом, а не просто на файловой системе.

Во-вторых, вы не показали нам выше содержимое /root/python_code/, вы уверены, что input_data.csv существует?

Ответ или решение

При выполнении команды bin/hdfs dfs -copyFromLocal вы столкнулись с ошибкой "No such file or directory". Давайте разберёмся, как решить эту проблему.

Причины ошибки

  1. Неправильный путь назначения: команда -copyFromLocal ожидает в качестве второго параметра путь к директории в HDFS, а не путь к локальной файловой системе. Это ключевой момент, так как HDFS и локальная файловая система имеют разные структуры и формат путей.

  2. Проверка существования файла: вам необходимо убедиться, что файл /root/python_code/input_data.csv действительно существует и доступен при попытке его скопировать.

Шаги для решения проблемы

  1. Проверьте доступность файла:
    В терминале выполните команду:

    ls /root/python_code/input_data.csv

    Если файл существует, вы увидите его в выводе. Если файла нет, вам необходимо указать правильный путь к файлу.

  2. Используйте правильный синтаксис для HDFS:
    Вместо:

    bin/hdfs dfs -copyFromLocal /root/python_code/input_data.csv /usr/local/hadoop/input_localuser

    вам нужно использовать следующий формат:

    bin/hdfs dfs -copyFromLocal /root/python_code/input_data.csv /input_localuser/

    Обратите внимание, что путь назначения /input_localuser/ в HDFS должен быть указан без привязки к локальной файловой системе. Убедитесь, что папка /input_localuser уже существует в HDFS или создайте её с помощью:

    bin/hdfs dfs -mkdir /input_localuser
  3. Запустите команду копирования снова:
    Теперь, когда вы убедились, что файл существует и целевая директория корректна, выполните:

    bin/hdfs dfs -copyFromLocal /root/python_code/input_data.csv /input_localuser/

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...