web-dev-qa-db-fra.com

hadoop fs -ls se traduit par "aucun fichier ou répertoire"

J'ai installé et configuré Hadoop 2.5.2 pour un cluster à 10 nœuds. 1 agit comme masternode et d'autres nœuds comme esclaves.

J'ai un problème lors de l'exécution des commandes hadoop fs. La commande hadoop fs -ls fonctionne correctement avec l'URI HDFS. Il affiche le message "ls:`. ': Aucun fichier ou répertoire "lorsqu'il est utilisé sans URI HDFS

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:~$ 

Attendu que l'exécution de la même commande avec l'URI HDFS

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:~$ 

Je reçois une exception dans le programme MapReduce en raison de ce comportement. jarlib fait référence à l'emplacement du fichier HDFS, alors que je veux que jarlib fasse référence aux fichiers jar stockés sur le système de fichiers local sur les nœuds Hadoop.

22
Tariq

Le comportement que vous voyez est attendu, laissez-moi vous expliquer ce qui se passe lorsque vous travaillez avec hadoop fs commandes.

La syntaxe de la commande est la suivante: hadoop fs -ls [path]

Par défaut, lorsque vous ne spécifiez pas [path] pour la commande ci-dessus, hadoop étend le chemin vers /home/[username] dans hdfs; où [username] est remplacé par le nom d'utilisateur linux qui exécute la commande.

Ainsi, lorsque vous exécutez cette commande:

ubuntu@xad101-master:~$ hadoop fs -ls

la raison pour laquelle vous voyez l'erreur est ls: '.': No such file or directory parce que hadoop cherche ce chemin /home/ubuntu, il semble que ce chemin n'existe pas dans hdfs.

La raison pour laquelle cette commande:

ubuntu@101-master:~$ hadoop fs -ls hdfs://101-master:50000/

fonctionne car, vous avez explicitement spécifié [path] et est la racine des hdfs. Vous pouvez également faire de même en utilisant ceci:

ubuntu@101-master:~$ hadoop fs -ls /

qui est automatiquement évalué à la racine de hdfs.

J'espère que cela efface le comportement que vous voyez lors de l'exécution de hadoop fs -ls commande.

Par conséquent, si vous souhaitez spécifier le chemin d'accès au système de fichiers local, utilisez file:/// schéma d'url.

54
Ashrith

cela a à voir avec le répertoire personnel manquant pour l'utilisateur. Une fois que j'ai créé le répertoire personnel sous hdfs pour l'utilisateur connecté, cela a fonctionné comme un charme ..

hdfs dfs -mkdir /user

hdfs dfs -mkdir /user/{loggedin user}

hdfs dfs -ls

cette méthode a résolu mon problème.

9
Krishna Vedula

Le répertoire utilisateur dans Hadoop est (en HDFS)

/user/<your operational system user>

Si vous obtenez ce message d'erreur, cela peut être dû au fait que vous n'avez pas encore créé votre répertoire utilisateur dans HDFS.

Utilisation

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

Pour voir quel est votre utilisateur actuel du système d'exploitation, utilisez:

id -un

hadoop fs -ls il devrait commencer à fonctionner ...

4
Samuel Corradi

Il y a quelques choses à l'œuvre ici; basé sur "jarlib fait référence à l'emplacement du fichier HDFS", il semble que vous ayez en effet un chemin HDFS défini comme votre fs.default.name, qui est en effet la configuration typique. Ainsi, lorsque vous tapez hadoop fs -ls, c'est en effet essayer de regarder à l'intérieur de HDFS, sauf qu'il regarde dans votre répertoire de travail actuel , qui devrait être quelque chose comme hdfs://101-master:50000/user/ubuntu. Le message d'erreur est malheureusement quelque peu déroutant car il ne vous dit pas que . a été interprété comme le chemin complet. Si vous hadoop fs -mkdir /user/ubuntu puis hadoop fs -ls devrait commencer à fonctionner.

Ce problème n'est pas lié à votre problème "jarlib"; chaque fois que vous souhaitez référencer des fichiers stockés explicitement dans le système de fichiers local, mais lorsque le chemin passe par la résolution Path de Hadoop, vous devez simplement ajouter file:/// pour forcer Hadoop à se référer au système de fichiers local. Par exemple:

hadoop fs -ls file:///tmp

Essayez de passer les chemins de vos fichiers jar en tant que fille file:///path/to/your/jarfile et ça devrait marcher.

2
Dennis Huo