Impossible de localiser le binaire winutils dans le chemin binaire hadoop


109

J'obtiens l'erreur suivante lors du démarrage de namenode pour la dernière version hadoop-2.2. Je n'ai pas trouvé le fichier winutils exe dans le dossier hadoop bin. J'ai essayé les commandes ci-dessous

$ bin/hdfs namenode -format
$ sbin/yarn-daemon.sh start resourcemanager

ERROR [main] util.Shell (Shell.java:getWinUtilsPath(303)) - Failed to locate the winutils binary in the hadoop binary path
java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
    at org.apache.hadoop.util.Shell.getQualifiedBinPath(Shell.java:278)
    at org.apache.hadoop.util.Shell.getWinUtilsPath(Shell.java:300)
    at org.apache.hadoop.util.Shell.<clinit>(Shell.java:293)
    at org.apache.hadoop.util.StringUtils.<clinit>(StringUtils.java:76)
    at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.main(ResourceManager.java:863)


En essayant de me débarrasser de ce message d'erreur, j'ai défini -Dhadoop.home.dir sur une valeur significative. Maintenant, j'obtiens quelque chose comme (chemin local remplacé par le nom de la variable): Impossible de localiser l'exécutable $ {HADOOP_HOME} \ bin \ winutils.exe dans les binaires Hadoop. Et devinez quoi: définir la variable n'a pas fait apparaître ce binaire. L'ERREUR de priorité est également erronée, car l'application semble continuer. À mes yeux, c'est un bogue dans Hadoop 2.2.0.
Hiran

Il y a un (comme aujourd'hui ouvert) jira pour ceci> issues.apache.org/jira/browse/HADOOP-10051
René Nyffenegger

1
Il existe un HADOOP-11003 .
Remus Rusanu

1
Veuillez accepter la réponse de Prasad D. Il a fourni des fichiers prêts à l'emploi à utiliser; évitant ainsi les efforts.
Kaushik Lele

Réponses:


96

Solution simple: téléchargez-le ici et ajoutez-le à$HADOOP_HOME/bin

( Source )

MISE À JOUR IMPORTANTE:

Pour hadoop-2.6.0 vous pouvez télécharger des binaires depuis le blog Titus Barik >> .

J'ai non seulement besoin de pointer HADOOP_HOMEvers le répertoire extrait [path], mais également de fournir une propriété système -Djava.library.path=[path]\binpour charger des bibliothèques natives (dll).


Cela aide à démarrer le hdfs, mais lorsque j'essaye de mettre un fichier texte dans hdfs, cela donne une erreur Exception dans le thread "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.util.NativeCrc32.nativeComputeChunkedSumsBy teArray (II [BI [BIILjava / lang / String; JZ) V
Kaushik Lele

C'est en partie une copie de ma réponse. Le téléchargement et la source sont des liens de mon blog comme mentionné dans la réponse.
Abhijit

1
Cela semble également fonctionner avec Hadoop 2.7.3. Ou y aurait-il un problème? 1) télécharger à partir de la page ci-dessus. tar xfvz qui donne une distribution Hadoop 2.6. Copiez ensuite bin \ winutlis.exe dans le répertoire 2.73 \ bin. Instantanément, cela fonctionne. Jusqu'ici - du moins.
RichMeister

28

Si vous rencontrez ce problème lors de l'exécution d'une application locale autonome avec Spark (c'est-à-dire après avoir ajouté spark-assembly-xxx-hadoopx.xxjar ou la dépendance Maven au projet), une solution plus simple serait de mettre winutils.exe (télécharger d' ici ) dans "C: \ winutil \ bin". Ensuite, vous pouvez ajouter winutils.exe au répertoire de base hadoop en ajoutant la ligne suivante au code:

System.setProperty("hadoop.home.dir", "c:\\\winutil\\\")

Source: Cliquez ici


Pour moi, il suffisait de mettre les winutils hadoop/bin/bin/. Copiez donc simplement le bindossier winutils dans le dossier de hadoop bin. ( HADOOP_HOMEse déroule dans les vars env)
holzkohlengrill

+1 Il y a une barre oblique de trop dans le chemin du répertoire, donc je laisse ceci ici pour moi:System.setProperty("hadoop.home.dir", "c:\\winutil\\")
emragins

27

Si nous prenons directement la distribution binaire de la version Apache Hadoop 2.2.0 et essayons de l'exécuter sur Microsoft Windows, alors nous rencontrerons ERROR util.Shell: Impossible de localiser le binaire winutils dans le chemin binaire hadoop.

La distribution binaire de la version Apache Hadoop 2.2.0 ne contient pas certains composants natifs de Windows (comme winutils.exe, hadoop.dll etc.). Ceux-ci sont obligatoires (non facultatifs) pour exécuter Hadoop sous Windows.

Vous devez donc créer une distribution binaire native de hadoop pour Windows à partir des codes sources suivant le fichier "BUILD.txt" situé dans la distribution source de hadoop. Vous pouvez également suivre les articles suivants pour un guide étape par étape avec capture d'écran

Créer, installer, configurer et exécuter Apache Hadoop 2.2.0 dans le système d'exploitation Microsoft Windows

ERREUR util.Shell: Impossible de localiser le binaire winutils dans le chemin binaire hadoop


2
Salut Abhijit. Avez-vous suivi vos propres directions? Hadoop n'est pas pris en charge sous Windows. En fait, il n'est pris en charge que sur certaines versions de Windows Server. C'est très moche par Microsoft et HortonWorks.
javadba

2
C'était il y a plus de deux ans et c'était très (très!) Vrai à l'époque. J'avais vérifié directement avec les ingénieurs Hortonworks juste deux semaines avant une conférence.
javadba

18

L'instruction java.io.IOException: impossible de localiser l'exécutable null \ bin \ winutils.exe

explique que la valeur NULL est reçue lors du développement ou du remplacement d'une variable d'environnement. Si vous voyez la source dans Shell.Java dans le package commun, vous constaterez que la variable HADOOP_HOME n'est pas définie et que vous recevez null à la place de cela et donc de l'erreur.

Ainsi, HADOOP_HOME doit être défini correctement pour cela ou la propriété variable hadoop.home.dir.

J'espère que cela t'aides.

Merci, Kamleshwar.


1
Sur quel fichier de configuration nous devons définir la propriété hadoop.home.dir (Ex. Hdfs-site.xml, core-site.xml)?
Tushar Sarde

4
System.setProperty ("hadoop.home.dir", "C: \\ winutil \\"); référence: stackoverflow.com/a/33610936/3110474
Himanshu Bhandari

Si vous utilisez Windows, assurez-vous d'utiliser des doubles barres obliques inverses lors de l'écriture d'un chemin comme valeur.
rishirich

12

Winutils.exe est utilisé pour exécuter les commandes shell pour SPARK. Lorsque vous devez exécuter Spark sans installer Hadoop, vous avez besoin de ce fichier.

Les étapes sont les suivantes:

  1. Téléchargez winutils.exe à partir de l'emplacement suivant pour hadoop 2.7.1 https://github.com/steveloughran/winutils/tree/master/hadoop-2.7.1/bin [REMARQUE: Si vous utilisez une version hadoop séparée, veuillez télécharger le winutils à partir du dossier de version hadoop correspondant sur GITHUB à partir de l'emplacement mentionné ci-dessus.]

  2. Maintenant, créez un dossier 'winutils' dans le lecteur C: \. Créez maintenant un dossier «bin» dans le dossier «winutils» et copiez le winutils.exe dans ce dossier. Ainsi, l'emplacement de winutils.exe sera C: \ winutils \ bin \ winutils.exe

  3. Maintenant, ouvrez la variable d'environnement et définissez HADOOP_HOME = C: \ winutils [REMARQUE: veuillez ne pas ajouter \ bin dans HADOOP_HOME et pas besoin de définir HADOOP_HOME dans Path]

Votre problème doit être résolu !!


11

Je viens de rencontrer ce problème en travaillant avec Eclipse. Dans mon cas, j'avais téléchargé la bonne version de Hadoop (hadoop-2.5.0-cdh5.3.0.tgz), j'ai extrait le contenu et l'ai placé directement dans mon lecteur C. Puis je suis allé à

Eclipse-> Configurations de débogage / exécution -> Environnement (onglet) -> et ajouté

variable: HADOOP_HOME

Valeur: C: \ hadoop-2.5.0-cdh5.3.0



3

Dans Pyspark, pour exécuter une application Spark locale à l'aide de Pycharm, utilisez les lignes ci-dessous

os.environ['HADOOP_HOME'] = "C:\\winutils"
print os.environ['HADOOP_HOME']

2

winutils.exe est requis pour que hadoop exécute les commandes liées à hadoop. veuillez télécharger le fichier zip hadoop-common-2.2.0. winutils.exe se trouve dans le dossier bin. Extrayez le fichier zip et copiez-le dans le dossier hadoop / bin local.


2

J'étais confronté au même problème. Supprimer le bin\du chemin HADOOP_HOME l'a résolu pour moi. Le chemin de la variable HADOOP_HOME doit ressembler à quelque chose comme.

C:\dev\hadoop2.6\

Un redémarrage du système peut être nécessaire. Dans mon cas, redémarrer l'IDE était suffisant.


2

Configurez la variable HADOOP_HOME dans Windows pour résoudre le problème.

Vous pouvez trouver la réponse dans org/apache/hadoop/hadoop-common/2.2.0/hadoop-common-2.2.0-sources.jar!/org/apache/hadoop/util/Shell.java:

IOException de

  public static final String getQualifiedBinPath(String executable) 
  throws IOException {
    // construct hadoop bin path to the specified executable
    String fullExeName = HADOOP_HOME_DIR + File.separator + "bin" 
      + File.separator + executable;
    File exeFile = new File(fullExeName);
    if (!exeFile.exists()) {
      throw new IOException("Could not locate executable " + fullExeName
        + " in the Hadoop binaries.");
    }
    return exeFile.getCanonicalPath();
  }

HADOOP_HOME_DIR de

// first check the Dflag hadoop.home.dir with JVM scope
String home = System.getProperty("hadoop.home.dir");
// fall back to the system/user-global env variable
if (home == null) {
  home = System.getenv("HADOOP_HOME");
}


1

J'avais le même problème dans Windows. Je l'ai réparé par

  • Téléchargement de hadoop-common-2.2.0-bin-master à partir du lien .
  • Créez une variable utilisateur HADOOP_HOME dans la variable d'environnement et attribuez le chemin du répertoire bin hadoop-common comme valeur.
  • Vous pouvez le vérifier en exécutant hadoop dans cmd.
  • Redémarrez l'EDI et exécutez-le.

1

Téléchargez la version souhaitée du dossier hadoop (par exemple, si vous installez spark sur Windows, puis la version hadoop pour laquelle votre spark est conçu) à partir de ce lien sous forme de zip.

Extrayez le zip dans le répertoire souhaité. Vous devez avoir un répertoire de la forme hadoop\bin(créez explicitement une telle hadoop\binstructure de répertoire si vous le souhaitez) bincontenant tous les fichiers contenus dans le bindossier du hadoop téléchargé. Cela contiendra de nombreux fichiers tels que hdfs.dll, hadoop.dll etc. en plus de winutil.exe.

Créez maintenant une variable d'environnementHADOOP_HOME et définissez-la sur <path-to-hadoop-folder>\hadoop. Puis ajoutez ;%HADOOP_HOME%\bin; à PATHla variable d'environnement.

Ouvrez une "nouvelle invite de commande" et essayez de réexécuter votre commande.


cela a fonctionné pour moi, et l'alternative avec HADOOP_HOME pointant vers le répertoire bin (plutôt que son parent) n'a pas fonctionné.
philwalk

0

J'ai utilisé les versions "hbase-1.3.0" et "hadoop-2.7.3". La définition de la variable d'environnement HADOOP_HOME et la copie du fichier 'winutils.exe' sous le dossier HADOOP_HOME / bin résout le problème sur un système d'exploitation Windows. Attention à définir l'environnement HADOOP_HOME sur le dossier d'installation de hadoop (le dossier / bin n'est pas nécessaire pour ces versions). De plus, j'ai préféré utiliser l'outil multiplateforme cygwin pour régler les fonctionnalités du système d' exploitation Linux (autant que possible), car l'équipe Hbase recommande Linux / Unix env.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.