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
-------------------------------------------------------