comandos - hadoop fs-ls resulta en "no existe tal archivo o directorio"
tail hdfs (5)
El directorio de usuario en Hadoop es (en HDFS)
/user/<your operational system user>
Si recibe este mensaje de error, puede deberse a que aún no ha creado su directorio de usuario dentro de HDFS.
Utilizar
hadoop fs -mkdir -p /user/<current o.p. user directory>
Para ver cuál es su usuario actual del sistema operacional, use:
id -un
hadoop fs -ls
debería comenzar a funcionar ...
He instalado y configurado Hadoop 2.5.2 para un clúster de 10 nodos. 1 está actuando como nodo maestro y otros nodos como esclavos.
Tengo un problema al ejecutar los comandos de hadoop fs. El comando hadoop fs -ls funciona bien con HDFS URI. Da el mensaje "ls:`. '': No hay tal archivo o directorio "cuando se usa sin HDFS URI
ubuntu@101-master:~$ 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
ubuntu@101-master:~$
Considerando que, al ejecutar el mismo comando con HDFS URI
ubuntu@101-master:~$ 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
ubuntu@101-master:~$
Estoy recibiendo una excepción en el programa MapReduce debido a este comportamiento. jarlib se refiere a la ubicación del archivo HDFS, mientras que, quiero que jarlib haga referencia a los archivos jar almacenados en el sistema de archivos local en los nodos Hadoop.
Hay un par de cosas trabajando aquí; basado en "jarlib se refiere a la ubicación del archivo HDFS", parece que tiene una ruta HDFS configurada como fs.default.name
, que de hecho es la configuración típica. Por lo tanto, cuando escribe hadoop fs -ls
, esto de hecho está tratando de buscar dentro de HDFS, excepto que está buscando en su directorio de trabajo actual , que debería ser algo así como hdfs://101-master:50000/user/ubuntu
. El mensaje de error es desafortunadamente algo confuso ya que no te dice eso .
fue interpretado como ese camino completo. Si tiene hadoop fs -mkdir /user/ubuntu
entonces hadoop fs -ls
debería comenzar a funcionar.
Este problema no está relacionado con su problema "jarlib"; siempre que quiera referir archivos almacenados explícitamente en el sistema de archivos local, pero donde la ruta pasa por la resolución de Path
de Hadoop, simplemente necesita agregar el file:///
para forzar a Hadoop a referirse al sistema de archivos local. Por ejemplo:
hadoop fs -ls file:///tmp
Intente pasar sus rutas de archivos jar como file:///path/to/your/jarfile
y debería funcionar.
Se espera el comportamiento que estás viendo, déjame explicarte qué sucede cuando trabajas con los comandos de hadoop fs
.
La sintaxis del comando es esta: hadoop fs -ls [path]
De forma predeterminada, cuando no especifica [path]
para el comando anterior, hadoop expande la ruta a /home/[username]
en hdfs; donde [username]
se reemplaza con el nombre de usuario de Linux que está ejecutando el comando.
Entonces, cuando ejecutas este comando:
ubuntu@xad101-master:~$ hadoop fs -ls
la razón por la que está viendo el error es ls: ''.'': No such file or directory
existe ls: ''.'': No such file or directory
porque hadoop está buscando esta ruta /home/ubuntu
, parece que esta ruta no existe en hdfs.
La razón por la cual este comando:
ubuntu@101-master:~$ hadoop fs -ls hdfs://101-master:50000/
está funcionando porque, ha especificado explícitamente [path]
y es la raíz de los hdfs. También puedes hacer lo mismo usando esto:
ubuntu@101-master:~$ hadoop fs -ls /
que se evalúa automáticamente a la raíz de hdfs.
Espero, esto borra el comportamiento que estás viendo mientras hadoop fs -ls
comando hadoop fs -ls
.
Por lo tanto, si desea especificar la ruta del sistema de archivos local, use file:///
esquema file:///
url.
WARN util.NativeCodeLoader: no se puede cargar la biblioteca native-hadoop para su plataforma ... usando clases incorporadas en java, donde corresponda
Este error se eliminará usando este comando en el archivo .bashrc:
export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=/usr/local/hadoop/lib/native"
------------------------------------------------------
/usr/local/hadoop is location where hadoop is install
-------------------------------------------------------
esto tiene que ver con el directorio de inicio que falta para el usuario. Una vez que creé el directorio de inicio en hdfs para el usuario que inició sesión, funcionó como un encanto.
hdfs dfs -mkdir /user
hdfs dfs -mkdir /user/{loggedin user}
hdfs dfs -ls
este método solucionó mi problema.