Error al ubicar el binario winutils en la ruta binaria hadoop

108

Recibo el siguiente error al iniciar namenode para la última versión de hadoop-2.2. No encontré el archivo exe de winutils en la carpeta bin hadoop. Intenté debajo de los comandos

$ 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)
usuario2925491
fuente
Tratando de deshacerme de ese mensaje de error, configuré -Dhadoop.home.dir en un valor significativo. Ahora obtengo algo como (ruta local reemplazada por nombre de variable): No se pudo localizar el ejecutable $ {HADOOP_HOME} \ bin \ winutils.exe en los binarios de Hadoop. Y adivinen qué: establecer la variable no hizo que apareciera ese binario. Además, la prioridad ERROR es incorrecta, ya que la aplicación parece continuar. En mi opinión, eso es un error en Hadoop 2.2.0.
Hiran
Hay una jira (según hoy abierta) para esto> issues.apache.org/jira/browse/HADOOP-10051
René Nyffenegger
1
Hay un HADOOP-11003 .
Remus Rusanu
1
Acepte la respuesta dada por Prasad D. Él ha proporcionado archivos prefabricados para su uso; evitando así esfuerzos.
Kaushik Lele

Respuestas:

96

Solución simple: descárguelo desde aquí y agréguelo a$HADOOP_HOME/bin

( Fuente )

ACTUALIZACIÓN IMPORTANTE:

Para hadoop-2.6.0 puede descargar binarios del blog de Titus Barik >> .

No solo he necesitado apuntar HADOOP_HOMEal directorio extraído [path], sino también proporcionar propiedades del sistema -Djava.library.path=[path]\binpara cargar bibliotecas nativas (dll).

Prasad D
fuente
Esto ayuda a iniciar el hdfs, pero cuando intento poner un archivo de texto en hdfs, aparece un error Exception en el hilo "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.util.NativeCrc32.nativeComputeChunkedSumsBy teArray (II [BI [BIILjava / lang / String; JZ) V
Kaushik Lele
Es un duplicado parcial de mi respuesta. Tanto la descarga como la fuente son enlaces de mi blog como se menciona en la respuesta.
Abhijit
1
Esto parece funcionar también con Hadoop 2.7.3. ¿O habría algún problema? 1) descargar de la página anterior. tar xfvz que da una distribución Hadoop 2.6. Luego copie bin \ winutlis.exe en el directorio 2.73 \ bin. Al instante, funciona. Hasta ahora, al menos.
RichMeister
28

Si se enfrenta a este problema al ejecutar una aplicación local autónoma con Spark (es decir, después de agregar spark-assembly-xxx-hadoopx.xxjar o la dependencia de Maven al proyecto), una solución más sencilla sería poner winutils.exe (descargar desde aquí ) en "C: \ winutil \ bin". Luego, puede agregar winutils.exe al directorio de inicio de hadoop agregando la siguiente línea al código:

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

Fuente: Haga clic aquí

TrnKh
fuente
Para mí fue suficiente poner las cosas de winutils hadoop/bin/bin/. Así que simplemente copie la bincarpeta winutils en la carpeta de hadoop bin. ( HADOOP_HOMEse establece en env vars)
holzkohlengrill
+1 Hay demasiadas barras en la ruta del directorio, así que dejo esto aquí para mí:System.setProperty("hadoop.home.dir", "c:\\winutil\\")
emragins
27

Si tomamos directamente la distribución binaria de la versión Apache Hadoop 2.2.0 e intentamos ejecutarla en Microsoft Windows, entonces encontraremos ERROR util.Shell: No se pudo ubicar el binario winutils en la ruta binaria hadoop.

La distribución binaria de la versión Apache Hadoop 2.2.0 no contiene algunos componentes nativos de Windows (como winutils.exe, hadoop.dll, etc.). Estos son necesarios (no opcionales) para ejecutar Hadoop en Windows.

Por lo tanto, debe crear una distribución binaria nativa de Windows de hadoop a partir de los códigos fuente siguiendo el archivo "BUILD.txt" ubicado dentro de la distribución fuente de hadoop. También puede seguir las siguientes publicaciones para obtener una guía paso a paso con captura de pantalla

Cree, instale, configure y ejecute Apache Hadoop 2.2.0 en el sistema operativo Microsoft Windows

ERROR util.Shell: no se pudo ubicar el binario winutils en la ruta binaria de hadoop

Abhijit
fuente
2
Hola Abhijit. ¿Ha seguido sus propias instrucciones? Hadoop no es compatible con Windows. En realidad, solo es compatible con ciertas versiones de Windows Server. Eso es muy pésimo por Microsoft y HortonWorks.
javadba
2
Eso fue hace más de dos años y fue muy (¡muy!) Cierto en ese momento. Había verificado directamente con los ingenieros de Hortonworks solo dos semanas antes en una conferencia.
javadba
18

La declaración java.io.IOException: no se pudo localizar el ejecutable null \ bin \ winutils.exe

explica que el nulo se recibe al expandir o reemplazar una variable de entorno. Si ve la fuente en Shell.Java en el paquete común, encontrará que la variable HADOOP_HOME no se está configurando y está recibiendo nulo en lugar de eso y, por lo tanto, el error.

Por lo tanto, HADOOP_HOME debe configurarse para esto correctamente o la propiedad variable hadoop.home.dir.

Espero que esto ayude.

Gracias, Kamleshwar.

Kamleshwar
fuente
1
¿En qué archivo de configuración necesitamos establecer la propiedad hadoop.home.dir (por ejemplo, hdfs-site.xml, core-site.xml)?
Tushar Sarde
4
System.setProperty ("hadoop.home.dir", "C: \\ winutil \\"); referencia: stackoverflow.com/a/33610936/3110474
Himanshu Bhandari
Si está usando Windows, asegúrese de usar barras invertidas dobles al escribir cualquier ruta como valor.
rishirich
12

Winutils.exe se utiliza para ejecutar los comandos de shell para SPARK. Cuando necesite ejecutar Spark sin instalar Hadoop, necesita este archivo.

Los pasos son los siguientes:

  1. Descargue winutils.exe desde la siguiente ubicación para hadoop 2.7.1 https://github.com/steveloughran/winutils/tree/master/hadoop-2.7.1/bin [NOTA: Si está utilizando una versión separada de hadoop, descargue la winutils de la carpeta de la versión correspondiente de hadoop en GITHUB desde la ubicación mencionada anteriormente.]

  2. Ahora, cree una carpeta 'winutils' en C: \ drive. Ahora cree una carpeta 'bin' dentro de la carpeta 'winutils' y copie winutils.exe en esa carpeta. Entonces, la ubicación de winutils.exe será C: \ winutils \ bin \ winutils.exe

  3. Ahora, abra la variable de entorno y configure HADOOP_HOME = C: \ winutils [NOTA: No agregue \ bin en HADOOP_HOME y no es necesario configurar HADOOP_HOME en la ruta]

¡Tu problema debe resolverse!

Anurag
fuente
11

Me encontré con este problema mientras trabajaba con Eclipse. En mi caso, descargué la versión correcta de Hadoop (hadoop-2.5.0-cdh5.3.0.tgz), extraje el contenido y lo coloqué directamente en mi unidad C. Después fuí a

Eclipse-> Configuraciones de depuración / ejecución -> Entorno (pestaña) -> y agregado

variable: HADOOP_HOME

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

Daniel Epstein
fuente
3

En Pyspark, para ejecutar la aplicación Spark local usando Pycharm, use las siguientes líneas

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

winutils.exe son necesarios para que hadoop ejecute comandos relacionados con hadoop. descargue el archivo zip hadoop-common-2.2.0. winutils.exe se puede encontrar en la carpeta bin. Extraiga el archivo zip y cópielo en la carpeta local hadoop / bin.

Mohan Raj
fuente
2

Estaba enfrentando el mismo problema. Eliminar el bin\de la ruta HADOOP_HOME lo resolvió por mí. La ruta de la variable HADOOP_HOME debería tener un aspecto similar a.

C:\dev\hadoop2.6\

Puede ser necesario reiniciar el sistema. En mi caso, reiniciar el IDE fue suficiente.

Asmat Ali
fuente
2

Configure la variable HADOOP_HOME en Windows para resolver el problema.

Puede encontrar la respuesta en 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");
}
Andy
fuente
1

Estaba teniendo el mismo problema en Windows. Lo arreglé por

  • Descargando hadoop-common-2.2.0-bin-master desde el enlace .
  • Cree una variable de usuario HADOOP_HOME en la variable de entorno y asigne la ruta del directorio bin hadoop-common como valor.
  • Puede verificarlo ejecutando hadoop en cmd.
  • Reinicie el IDE y ejecútelo.
Dipak Shaw
fuente
1

Descargue la versión deseada de la carpeta hadoop (digamos que si está instalando Spark en Windows, entonces la versión de Hadoop para la que está construido su Spark) desde este enlace como zip.

Extraiga el zip al directorio deseado. Debe tener un directorio del formulario hadoop\bin(cree explícitamente dicha hadoop\binestructura de directorio si lo desea) que bincontenga todos los archivos contenidos en la bincarpeta del hadoop descargado. Este contendrá muchos archivos como hdfs.dll, hadoop.dll, etc. además de winutil.exe.

Ahora cree la variable de entorno HADOOP_HOME y establézcala en <path-to-hadoop-folder>\hadoop. Luego agregue ;%HADOOP_HOME%\bin; a PATHla variable de entorno.

Abra un "nuevo símbolo del sistema" e intente volver a ejecutar su comando.

Mahesha999
fuente
esto funcionó para mí, y la alternativa con HADOOP_HOME apuntando al directorio bin (en lugar de su padre) no lo hizo.
philwalk
0

Usé las versiones "hbase-1.3.0" y "hadoop-2.7.3". Establecer la variable de entorno HADOOP_HOME y copiar el archivo 'winutils.exe' en la carpeta HADOOP_HOME / bin resuelve el problema en un sistema operativo Windows. Atención para configurar el entorno HADOOP_HOME en la carpeta de instalación de hadoop (la carpeta / bin no es necesaria para estas versiones). Además, preferí usar la herramienta multiplataforma cygwin para configurar la funcionalidad del sistema operativo linux (lo más posible) porque el equipo de Hbase recomienda env linux / unix.

Mahkras
fuente