web-dev-qa-db-fra.com

/ bin/bash:/bin/Java: aucun fichier ni répertoire de ce type

J'essayais d'exécuter un programme MapReduce au format wordcount utilisant Java 1.7 SDK et Hadoop2.7.1 sous Mac OS X EL Captain 10.11 et le message d'erreur suivant s'affiche dans mon journal de conteneur "stderr" /Bin/bash:/bin/Java: Aucun fichier ou répertoire de ce type

Journal d'application

5/11/27 02:52:33 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-Java classes where applicable
15/11/27 02:52:33 INFO client.RMProxy: Connecting to ResourceManager at /192.168.200.96:8032
15/11/27 02:52:34 INFO input.FileInputFormat: Total input paths to process : 0
15/11/27 02:52:34 INFO mapreduce.JobSubmitter: number of splits:0
15/11/27 02:52:34 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1448608832342_0003
15/11/27 02:52:34 INFO impl.YarnClientImpl: Submitted application application_1448608832342_0003
15/11/27 02:52:34 INFO mapreduce.Job: The url to track the job: http://mymac.local:8088/proxy/application_1448608832342_0003/
15/11/27 02:52:34 INFO mapreduce.Job: Running job: job_1448608832342_0003
15/11/27 02:52:38 INFO mapreduce.Job: Job job_1448608832342_0003 running in uber mode : false
15/11/27 02:52:38 INFO mapreduce.Job:  map 0% reduce 0%
15/11/27 02:52:38 INFO mapreduce.Job: Job job_1448608832342_0003 failed with state FAILED due to: Application application_1448608832342_0003 failed 2 times due to AM Container for appattempt_1448608832342_0003_000002 exited with  exitCode: 127
For more detailed output, check application tracking page:http://mymac.local:8088/cluster/app/application_1448608832342_0003Then, click on links to logs of each attempt.
Diagnostics: Exception from container-launch.
Container id: container_1448608832342_0003_02_000001
Exit code: 127
Stack trace: ExitCodeException exitCode=127:
    at org.Apache.hadoop.util.Shell.runCommand(Shell.Java:545)
    at org.Apache.hadoop.util.Shell.run(Shell.Java:456)
    at org.Apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.Java:722)
    at org.Apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerExecutor.Java:211)
    at org.Apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.Java:302)
    at org.Apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.Java:82)
    at Java.util.concurrent.FutureTask.run(FutureTask.Java:262)
    at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1145)
    at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:615)
    at Java.lang.Thread.run(Thread.Java:745)


Container exited with a non-zero exit code 127
Failing this attempt. Failing the application.
15/11/27 02:52:38 INFO mapreduce.Job: Counters: 0

Commande je cours

hadoop jar wordcount.jar org.myorg.WordCount /user/gangadharkadam/input/ /user/gangadharkadam/output/

Ma variable ENV are-

export   Java_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home
export HADOOP_HOME=/usr/local/hadoop/hadoop-2.7.1
export HADOOP_MAPRED_HOME=/usr/local/hadoop/hadoop-2.7.1
export HADOOP_COMMON_HOME=/usr/local/hadoop/hadoop-2.7.1
export HADOOP_HDFS_HOME=/usr/local/hadoop/hadoop-2.7.1
export YARN_HOME=/usr/local/hadoop/hadoop-2.7.1
export HADOOP_CONF_DIR=/usr/local/hadoop/hadoop-2.7.1/etc/hadoop
export HADOOP_CLASSPATH=$Java_HOME/lib/tools.jar

export PATH=$PATH:$Java_HOME/bin:$HADOOP_HOME/bin:HADOOP_HOME/sbin:$M2_HOME/bin:$ANT_HOME/bin:$IVY_HOME/bin:$FB_HOME/bin:$MYSQL_HOME/bin:$MYSQL_HOME/lib:$SQOOP_HOME/bin

Le problème semble être lié au fait que YARN utilise un chemin différent pour l'exécutable Java, différent de celui que vous avez dans votre système d'exploitation. les journaux locaux de la tâche ayant échoué dans «stderr» indiquent: /bin/bash:/bin/Java: aucun fichier ni répertoire de ce type.

J'ai essayé de créer un lien symbolique de $ Java_HOM/bin/Java vers/bin/Java mais dans El Captian OS X mais cela ne permet pas de créer un lien symbolique. New OS X EL Captian a un identifiant de connexion sans racine et l’utilisateur ne peut rien créer sur certains dossiers restreints tels que/bin /. Tout travail sur cette question est vivement apprécié. Merci d’avance.

14
geekay2015

Cette réponse est applicable à Hadoop versions 2.6.0 et antérieures. Désactiver SIP et créer un lien symbolique fournit une solution de contournement. Une meilleure solution consiste à réparer le hadoop-config.sh afin qu’il récupère correctement votre Java_HOME. 

Dans HADOOP_HOME/libexec/hadoop-config.sh, recherchez la condition if inférieure à # Attempt to set Java_HOME if it is not set.

Supprimez les parenthèses supplémentaires dans les lignes d'exportation Java_HOME comme indiqué ci-dessous. Change ça 

if [ -x /usr/libexec/Java_home ]; then
    export Java_HOME=($(/usr/libexec/Java_home))
else
    export Java_HOME=(/Library/Java/Home)
fi

à 

if [ -x /usr/libexec/Java_home ]; then
    // note that the extra parentheses are removed
    export Java_HOME=$(/usr/libexec/Java_home)
else
    export Java_HOME=/Library/Java/Home
fi

Redémarrez le fil après avoir effectué ce changement.

Des informations plus détaillées peuvent être trouvées ici https://issues.Apache.org/jira/browse/HADOOP-8717 et il semble que Hadoop 3.0.0-alpha1 soit la première version avec le correctif.

29
sparker

Démarrer YARN en utilisant les commandes suivantes au lieu de $HADOOP_PREFIX/sbin/start-yarn.sh a résolu ce problème pour moi.

$HADOOP_PREFIX/sbin/yarn-daemon.sh start resourcemanager;

$HADOOP_PREFIX/sbin/yarn-daemon.sh start nodemanager;

comme mentionné sur le lien suivant 

https://issues.Apache.org/jira/browse/HADOOP-8717

4
Damodar Hegde

J'obtenais la même erreur lorsque j'ai installé hadoop 2.7.1 avec les configurations que vous avez mentionnées. J'ai suivi ce lien pour avoir une idée de la raison de cette erreur.

https://cloudcelebrity.wordpress.com/2014/01/31/yarn-job-problem-application-application_-failed-1-times-due-tue-to-am-container-for-xx-exited-with- code de sortie-127/

Cependant, étant donné que je suis sous OS X El Capitan .., il me faut l’absence de racine (désactiver la protection de l’intégrité du système), puis poursuivre avec 

Sudo ln -s /usr/bin/Java /bin/Java

N'oubliez pas d'activer SIP après avoir terminé le changement ci-dessus pour votre sécurité MAC. Après ce changement, le programme map-reduction fonctionnera comme prévu.

2
mmsr

Aucune de ces réponses ne m'a aidé. Ce que j'ai corrigé pour moi était:

Paramétrer le hadoop-env.sh dans /usr/local/Cellar/hadoop/etc/hadoop/hadoop-env.sh

Changé ceci:

export Java_HOME=${Java_HOME}

Pour ça:

export Java_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home

Tout le crédit à cet utilisateur: https://stackoverflow.com/a/39676720/992347

À votre santé

1

Aller au fichier ./libexec/hadoop-config.sh

et ajoutez Java=$Java_HOME

"before # Essayez de définir Java_HOME s'il n'est pas défini if [[ -z $Java_HOME ]]; then"

Cela devrait résoudre votre problème

1
Nikhil Chauhan

Cette ligne est fausse.

export    $Java_HOME=

devrait commencer

export Java_HOME=

Vous utilisez uniquement $ lorsque vous recherchez une variable.

0
Peter Lawrey