Impossibile individuare il file binario winutils nel percorso binario hadoop


108

Ricevo il seguente errore durante l'avvio di namenode per l'ultima versione di hadoop-2.2. Non ho trovato il file exe di winutils nella cartella bin hadoop. Ho provato sotto i comandi

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


Cercando di eliminare questo messaggio di errore, ho impostato -Dhadoop.home.dir su un valore significativo. Ora ottengo qualcosa del tipo (percorso locale sostituito dal nome della variabile): Impossibile individuare l'eseguibile $ {HADOOP_HOME} \ bin \ winutils.exe nei binari di Hadoop. E indovina un po ': l'impostazione della variabile non ha fatto apparire quel binario. Anche la priorità ERROR è sbagliata, poiché l'applicazione sembra continuare. Ai miei occhi questo è un bug in Hadoop 2.2.0.
Hiran

C'è un jira (come da oggi aperto) per questo> issues.apache.org/jira/browse/HADOOP-10051
René Nyffenegger


1
Si prega di accettare la risposta data da Prasad D. Ha fornito file già pronti da utilizzare; evitando così sforzi.
Kaushik Lele

Risposte:


96

Soluzione semplice: scaricalo da qui e aggiungilo a$HADOOP_HOME/bin

( Fonte )

AGGIORNAMENTO IMPORTANTE:

Per hadoop-2.6.0 puoi scaricare i binari dal blog di Titus Barik >> .

Non ho solo bisogno di puntare HADOOP_HOMEalla directory estratta [path], ma anche di fornire la proprietà di sistema -Djava.library.path=[path]\binper caricare le librerie native (dll).


Questo aiuta ad avviare hdfs ma quando provo a mettere un file di testo in hdfs dà errore Eccezione nel thread "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.util.NativeCrc32.nativeComputeChunkedSumsBy teArray (II [BI [BIILjava / lang / String; JZ) V
Kaushik Lele

È parzialmente duplicato della mia risposta. Sia il download che la fonte sono collegamenti del mio blog come menzionato nella risposta.
Abhijit

1
Sembra funzionare anche con Hadoop 2.7.3. O ci sarebbe un problema? 1) scarica dalla pagina sopra. tar xfvz che fornisce una distribuzione Hadoop 2.6. Quindi copia bin \ winutlis.exe nella directory 2.73 \ bin. Immediatamente, funziona. Finora, almeno.
RichMeister

28

Se affronti questo problema quando esegui un'applicazione locale autonoma con Spark (ovvero, dopo aver aggiunto spark-assembly-xxx-hadoopx.xxjar o la dipendenza Maven al progetto), una soluzione più semplice sarebbe mettere winutils.exe (scarica da qui ) in "C: \ winutil \ bin". Quindi puoi aggiungere winutils.exe alla home directory di hadoop aggiungendo la seguente riga al codice:

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

Fonte: clicca qui


Per me è stato sufficiente inserire la roba di winutils hadoop/bin/bin/. Quindi copia la bincartella winutils nella cartella di hadoop bin. ( HADOOP_HOMEè ambientato in env vars)
holzkohlengrill

+1 C'è una barra di troppo nel percorso della directory, quindi lo lascio qui per me:System.setProperty("hadoop.home.dir", "c:\\winutil\\")
emragins

27

Se prendiamo direttamente la distribuzione binaria della versione Apache Hadoop 2.2.0 e proviamo a eseguirla su Microsoft Windows, incontreremo ERRORE util.Shell: impossibile individuare il file binario di winutils nel percorso binario hadoop.

La distribuzione binaria del rilascio Apache Hadoop 2.2.0 non contiene alcuni componenti nativi di Windows (come winutils.exe, hadoop.dll ecc.). Questi sono necessari (non facoltativi) per eseguire Hadoop su Windows.

Quindi è necessario creare la distribuzione binaria nativa di Windows di hadoop dai codici sorgente seguendo il file "BUILD.txt" situato all'interno della distribuzione dei sorgenti di hadoop. Puoi anche seguire i seguenti post per una guida passo passo con screenshot

Crea, installa, configura ed esegui Apache Hadoop 2.2.0 nel sistema operativo Microsoft Windows

ERRORE util.Shell: impossibile individuare il file binario winutils nel percorso binario hadoop


2
Ciao Abhijit. Hai seguito le tue indicazioni? Hadoop non è supportato su Windows. In realtà è supportato solo su alcune versioni di Windows Server. Questo è molto schifoso per Microsoft e HortonWorks.
javadba

2
Era più di due anni fa e all'epoca era molto (molto!) Vero. Avevo verificato direttamente con gli ingegneri di Hortonworks solo due settimane prima in una conferenza.
javadba

18

L'istruzione java.io.IOException: Impossibile individuare l'eseguibile null \ bin \ winutils.exe

spiega che il valore nullo viene ricevuto quando si espande o si sostituisce una variabile d'ambiente. Se vedi il Source in Shell.Java in Common Package, scoprirai che la variabile HADOOP_HOME non viene impostata e stai ricevendo null al posto di quello e quindi l'errore.

Quindi, HADOOP_HOME deve essere impostato correttamente per questo o per la proprietà della variabile hadoop.home.dir.

Spero che questo ti aiuti.

Grazie, Kamleshwar.


1
Su quale file di configurazione dobbiamo impostare la proprietà hadoop.home.dir (Es. Hdfs-site.xml, core-site.xml)?
Tushar Sarde

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

Se stai usando Windows, assicurati di usare le doppie barre rovesciate mentre scrivi qualsiasi percorso come valore.
rishirich

12

Winutils.exe viene utilizzato per eseguire i comandi della shell per SPARK. Quando è necessario eseguire Spark senza installare Hadoop, è necessario questo file.

I passaggi sono i seguenti:

  1. Scarica winutils.exe dal seguente percorso per hadoop 2.7.1 https://github.com/steveloughran/winutils/tree/master/hadoop-2.7.1/bin [NOTA: se stai usando una versione separata di hadoop, scarica il winutils dalla corrispondente cartella della versione di hadoop su GITHUB dalla posizione menzionata sopra.]

  2. Ora, crea una cartella "winutils" in C: \ drive. Ora crea una cartella "bin" all'interno della cartella "winutils" e copia il file winutils.exe in quella cartella. Quindi la posizione di winutils.exe sarà C: \ winutils \ bin \ winutils.exe

  3. Ora, apri la variabile d'ambiente e imposta HADOOP_HOME = C: \ winutils [NOTA: non aggiungere \ bin in HADOOP_HOME e non è necessario impostare HADOOP_HOME in Path]

Il tuo problema deve essere risolto !!


11

Ho appena riscontrato questo problema mentre lavoravo con Eclipse. Nel mio caso, ho scaricato la versione corretta di Hadoop (hadoop-2.5.0-cdh5.3.0.tgz), ho estratto il contenuto e l'ho inserito direttamente nel mio drive C. Poi sono andato a

Eclipse-> Debug / Esegui configurazioni -> Ambiente (scheda) -> e aggiunto

variabile: HADOOP_HOME

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



3

In Pyspark, per eseguire l'applicazione Spark locale utilizzando Pycharm, utilizzare le righe seguenti

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

2

winutils.exe sono necessari per hadoop per eseguire i comandi relativi ad hadoop. si prega di scaricare il file zip hadoop-common-2.2.0. winutils.exe può essere trovato nella cartella bin. Estrai il file zip e copialo nella cartella hadoop / bin locale.


2

Stavo affrontando lo stesso problema. La rimozione di bin\dal percorso HADOOP_HOME lo ha risolto per me. Il percorso per la variabile HADOOP_HOME dovrebbe avere un aspetto simile.

C:\dev\hadoop2.6\

Potrebbe essere necessario riavviare il sistema. Nel mio caso, è stato sufficiente riavviare l'IDE.


2

Imposta la variabile HADOOP_HOME in Windows per risolvere il problema.

Puoi trovare risposta in org/apache/hadoop/hadoop-common/2.2.0/hadoop-common-2.2.0-sources.jar!/org/apache/hadoop/util/Shell.java:

IOException da

  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 da

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

Ho riscontrato lo stesso problema in Windows. L'ho risolto

  • Download di hadoop-common-2.2.0-bin-master da link .
  • Crea una variabile utente HADOOP_HOME nella variabile d'ambiente e assegna il percorso della directory bin hadoop-common come valore.
  • Puoi verificarlo eseguendo hadoop in cmd.
  • Riavvia l'IDE ed eseguilo.

1

Scarica la versione desiderata della cartella hadoop (ad esempio, se stai installando spark su Windows, la versione hadoop per la quale è stata creata la tua spark) da questo link come zip.

Estrai lo zip nella directory desiderata. È necessario disporre della directory del modulo hadoop\bin(creare esplicitamente tale hadoop\binstruttura di directory se lo si desidera) bincontenente tutti i file contenuti nella bincartella dell'hadoop scaricato. Questo conterrà molti file come hdfs.dll, hadoop.dll ecc. Oltre a winutil.exe.

Ora crea la variabile d'ambiente HADOOP_HOME e impostala su <path-to-hadoop-folder>\hadoop. Quindi aggiungi ;%HADOOP_HOME%\bin; alla PATHvariabile d'ambiente.

Apri un "nuovo prompt dei comandi" e prova a rieseguire il comando.


questo ha funzionato per me, e l'alternativa con HADOOP_HOME che punta alla directory bin (piuttosto che al suo genitore) no.
philwalk

0

Ho usato le versioni "hbase-1.3.0" e "hadoop-2.7.3". L'impostazione della variabile d'ambiente HADOOP_HOME e la copia del file 'winutils.exe' nella cartella HADOOP_HOME / bin risolve il problema su un sistema operativo Windows. Attenzione a impostare l'ambiente HADOOP_HOME nella cartella di installazione di hadoop (la cartella / bin non è necessaria per queste versioni). Inoltre ho preferito utilizzare lo strumento multipiattaforma cygwin per sistemare la funzionalità del sistema operativo Linux (il più possibile) perché il team di Hbase consiglia linux / unix env.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.