Hasoop fs -ls приводит к "нет такого файла или каталога"

Я установил и настроил Hadoop 2.5.2 для кластера 10 node. 1 действует как мастонод и другие узлы как slavenodes.

У меня проблема с выполнением команд hadoop fs. Команда hasoop fs -ls отлично работает с URI HDFS. Он дает сообщение "ls:`.:: Нет такого файла или каталога" при использовании без HDFS URI

[email protected]:~$ hadoop fs -ls
15/01/30 17:03:49 WARN util.NativeCodeLoader: Unable to load native-hadoop 
ibrary for your platform... using builtin-java classes where applicable
ls: `.': No such file or directory
[email protected]:~$ 

В то время как выполнение той же команды с URI HDFS

[email protected]:~$ hadoop fs -ls hdfs://101-master:50000/
15/01/30 17:14:31 WARN util.NativeCodeLoader: Unable to load native-hadoop      
library for your platform... using builtin-java classes where applicable
Found 3 items
drwxr-xr-x   - ubuntu supergroup          0 2015-01-28 12:07 hdfs://101-master:50000/hvision-data
-rw-r--r--   2 ubuntu supergroup   15512587 2015-01-28 11:50 hdfs://101-master:50000/testimage.seq
 drwxr-xr-x   - ubuntu supergroup          0 2015-01-30 17:03 hdfs://101-master:50000/wrodcount-in
 [email protected]:~$ 

Я получаю исключение в программе MapReduce из-за такого поведения. jarlib ссылается на расположение файла HDFS, тогда как я хочу, чтобы jarlib ссылался на файлы jar, хранящиеся в локальной файловой системе на узлах Hadoop.

Ответ 1

Ожидается поведение, которое вы видите, позвольте мне объяснить, что происходит, когда вы работаете с командами hadoop fs.

Синтаксис команды таков: hadoop fs -ls [path]

По умолчанию, если вы не укажете [path] для указанной выше команды, hasoop расширяет путь до /home/[username] в hdfs; где [username] заменяется на имя пользователя linux, выполняющего команду.

Итак, когда вы выполните эту команду:

[email protected]:~$ hadoop fs -ls

причина, по которой вы видите ошибку, ls: '.': No such file or directory, потому что hasoop ищет этот путь /home/ubuntu, похоже, что этот путь не существует в hdfs.

Причина, по которой эта команда:

[email protected]:~$ hadoop fs -ls hdfs://101-master:50000/

работает, потому что вы явно указали [path] и являетесь корнем hdf. Вы также можете сделать это, используя это:

[email protected]:~$ hadoop fs -ls /

который автоматически оценивается в корневом каталоге hdfs.

Надеюсь, это очистит поведение, которое вы видите при выполнении команды hadoop fs -ls.

Следовательно, если вы хотите указать путь к локальной файловой системе, используйте схему file:/// url.

Ответ 2

это связано с отсутствующим домашним каталогом для пользователя. Как только я создал домашний каталог под hdfs для зарегистрированного пользователя, он работал как шарм.

hdfs dfs -mkdir /user

hdfs dfs -mkdir /user/{loggedin user}

hdfs dfs -ls

этот метод исправил мою проблему.

Ответ 3

Здесь есть пара вещей; основанный на "jarlib ссылается на местоположение файла HDFS", похоже, что у вас действительно есть путь HDFS, как ваш fs.default.name, который действительно является типичной настройкой. Итак, когда вы вводите hadoop fs -ls, это действительно пытается заглянуть внутрь HDFS, за исключением того, что он ищет в вашем рабочем каталоге , который должен быть чем-то вроде hdfs://101-master:50000/user/ubuntu. Сообщение об ошибке, к сожалению, несколько запутанно, поскольку он не говорит вам, что . интерпретировался как полный путь. Если вы hadoop fs -mkdir /user/ubuntu, тогда hadoop fs -ls должен начать работать.

Эта проблема не связана с вашей проблемой "jarlib"; когда вы хотите ссылаться на файлы, явно хранящиеся в локальной файловой системе, но где путь проходит через разрешение Hadoop Path, вам просто нужно добавить file:///, чтобы заставить Hadoop ссылаться на локальную файловую систему. Например:

hadoop fs -ls file:///tmp

Попробуйте передать свои пути в jar файле как fille file:///path/to/your/jarfile, и он должен работать.

Ответ 4

Пользовательский каталог в Hadoop (в HDFS)

/user/<your operational system user>

Если вы получите это сообщение об ошибке, возможно, это потому, что вы еще не создали свой пользовательский каталог в HDFS.

Использование

hadoop fs -mkdir -p /user/<current o.p. user directory>

Чтобы узнать, каков ваш текущий пользователь операционной системы, используйте:

id -un

hadoop fs -ls он должен начать работать...

Ответ 5

WARN util.NativeCodeLoader: невозможно загрузить библиотеку native-hadoop для вашего платформа... с использованием встроенных классов Java, где это применимо

Эта ошибка будет удалена с помощью этой команды в файле .bashrc:

export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=/usr/local/hadoop/lib/native"

------------------------------------------------------
/usr/local/hadoop is location where hadoop is install
-------------------------------------------------------