java.io.IOException: no se pudo localizar el ejecutable null \ bin \ winutils.exe en los archivos binarios de Hadoop. Spark Eclipse en Windows 7

92

No puedo ejecutar un sparktrabajo simple en Scala IDE(proyecto Maven Spark) instalado enWindows 7

Se ha agregado la dependencia del núcleo de Spark.

val conf = new SparkConf().setAppName("DemoDF").setMaster("local")
val sc = new SparkContext(conf)
val logData = sc.textFile("File.txt")
logData.count()

Error:

16/02/26 18:29:33 INFO SparkContext: Created broadcast 0 from textFile at FrameDemo.scala:13
16/02/26 18:29:34 ERROR Shell: 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.mapred.FileInputFormat.setInputPaths(FileInputFormat.java:362)
    at <br>org.apache.spark.SparkContext$$anonfun$hadoopFile$1$$anonfun$33.apply(SparkContext.scala:1015)
    at org.apache.spark.SparkContext$$anonfun$hadoopFile$1$$anonfun$33.apply(SparkContext.scala:1015)
    at <br>org.apache.spark.rdd.HadoopRDD$$anonfun$getJobConf$6.apply(HadoopRDD.scala:176)
    at <br>org.apache.spark.rdd.HadoopRDD$$anonfun$getJobConf$6.apply(HadoopRDD.scala:176)<br>
    at scala.Option.map(Option.scala:145)<br>
    at org.apache.spark.rdd.HadoopRDD.getJobConf(HadoopRDD.scala:176)<br>
    at org.apache.spark.rdd.HadoopRDD.getPartitions(HadoopRDD.scala:195)<br>
    at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:239)<br>
    at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:237)<br>
    at scala.Option.getOrElse(Option.scala:120)<br>
    at org.apache.spark.rdd.RDD.partitions(RDD.scala:237)<br>
    at org.apache.spark.rdd.MapPartitionsRDD.getPartitions(MapPartitionsRDD.scala:35)<br>
    at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:239)<br>
    at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:237)<br>
    at scala.Option.getOrElse(Option.scala:120)<br>
    at org.apache.spark.rdd.RDD.partitions(RDD.scala:237)<br>
    at org.apache.spark.SparkContext.runJob(SparkContext.scala:1929)<br>
    at org.apache.spark.rdd.RDD.count(RDD.scala:1143)<br>
    at com.org.SparkDF.FrameDemo$.main(FrameDemo.scala:14)<br>
    at com.org.SparkDF.FrameDemo.main(FrameDemo.scala)<br>
Elvish_Blade
fuente

Respuestas:

142

Aquí hay una buena explicación de su problema con la solución.

  1. Descargue winutils.exe desde http://public-repo-1.hortonworks.com/hdp-win-alpha/winutils.exe .
  2. Configure su variable de entorno HADOOP_HOME en el nivel del sistema operativo o mediante programación:

    System.setProperty ("hadoop.home.dir", "ruta completa a la carpeta con winutils");

  3. Disfrutar

Taky
fuente
14
Tengo que configurar HADOOP_HOME en la carpeta hadoop en lugar de la carpeta bin.
Stanley
4
Además, asegúrese de descargar el winutils.exe correcto según la versión de hadoop para la que se compiló Spark (por lo tanto, no necesariamente el enlace anterior). De lo contrario, el dolor aguarda :)
NP3
System.setProperty ("hadoop.home.dir", "C: \\ hadoop-2.7.1 \\")
Shyam Gupta
1
sí, exactamente como dice @Stanley. trabajó con la configuración de HADOOP_HOME en la carpeta hadoop en lugar de la carpeta bin.
Jazz
@ NP3 y ¿cómo conoces esa versión? Estoy usando el último pyspark. Gracias,
JDPeckham
66
  1. Descarga winutils.exe
  2. Crear carpeta, digamos C:\winutils\bin
  3. Copiar winutils.exeadentroC:\winutils\bin
  4. Establezca la variable de entorno HADOOP_HOMEenC:\winutils
Deokant Gupta
fuente
Además, si tiene una línea cmd abierta, reiníciela para que las variables surtan efecto.
eych
26

Sigue esto:

  1. Cree una bincarpeta en cualquier directorio (que se utilizará en el paso 3).

  2. Descargue winutils.exe y colóquelo en el directorio bin.

  3. Ahora agregue System.setProperty("hadoop.home.dir", "PATH/TO/THE/DIR");su código.

Ani Menon
fuente
2
Muchas gracias, justo lo que estaba buscando
user373201
3
Cabe señalar que la ruta a señalar no debe incluir el directorio 'bin'. Por ejemplo: si la ruta donde winutils.exe es "D: //Hadoop//bin//winutils.exe", entonces la ruta para hadoop.home.dir debe ser "D: // Hadoop"
Keshav Pradeep Ramanath
4

si vemos el problema a continuación

ERROR Shell: no se pudo localizar el binario winutils en la ruta binaria de hadoop

java.io.IOException: no se pudo localizar el ejecutable null \ bin \ winutils.exe en los archivos binarios de Hadoop.

luego sigue los siguientes pasos

  1. descargue winutils.exe desde http://public-repo-1.hortonworks.com/hdp- win-alpha / winutils.exe.
  2. y mantén esto en la carpeta bin de cualquier carpeta que hayas creado para.eg C: \ Hadoop \ bin
  3. y en el programa agregue la siguiente línea antes de crear SparkContext o SparkConf System.setProperty ("hadoop.home.dir", "C: \ Hadoop");
Prem S
fuente
4

En Windows 10, debe agregar dos argumentos diferentes.

(1) Agregue la nueva variable y valor como - HADOOP_HOME y la ruta (es decir, c: \ Hadoop) en Variables del sistema.

(2) Agregue / agregue una nueva entrada a la variable "Ruta" como "C: \ Hadoop \ bin".

Lo anterior funcionó para mí.

usuario1023627
fuente
4
1) Download winutils.exe from https://github.com/steveloughran/winutils 
2) Create a directory In windows "C:\winutils\bin
3) Copy the winutils.exe inside the above bib folder .
4) Set the environmental property in the code 
  System.setProperty("hadoop.home.dir", "file:///C:/winutils/");
5) Create a folder "file:///C:/temp" and give 777 permissions.
6) Add config property in spark Session ".config("spark.sql.warehouse.dir", "file:///C:/temp")"
Sampat Kumar
fuente
2

Tengo el mismo problema al ejecutar pruebas unitarias. Encontré esta solución alternativa:

La siguiente solución alternativa permite deshacerse de este mensaje:

    File workaround = new File(".");
    System.getProperties().put("hadoop.home.dir", workaround.getAbsolutePath());
    new File("./bin").mkdirs();
    new File("./bin/winutils.exe").createNewFile();

de: https://issues.cloudera.org/browse/DISTRO-544

Joabe Lucena
fuente
2

Alternativamente, puede descargar winutils.exedesde GITHub:

https://github.com/steveloughran/winutils/tree/master/hadoop-2.7.1/bin

reemplace hadoop-2.7.1con la versión que desee y coloque el archivo enD:\hadoop\bin

Si no tiene derechos de acceso a la configuración de las variables de entorno en su máquina, simplemente agregue la siguiente línea a su código:

System.setProperty("hadoop.home.dir", "D:\\hadoop");
Saurabh
fuente
1

Establecer la variable de entorno Hadoop_Home en las propiedades del sistema no funcionó para mí. Pero esto hizo:

  • Establezca Hadoop_Home en la pestaña de entorno Eclipse Run Configurations.
  • Siga la 'Configuración del entorno de Windows' desde aquí
Ramya
fuente
0

Además de mencionar su variable de entorno HADOOP_HOMEen Windows como C:\winutils, también debe asegurarse de ser el administrador de la máquina. Si no es así, y agregar variables de entorno le solicita las credenciales de administrador (incluso en las USERvariables), estas variables serán aplicables una vez que inicie su símbolo del sistema como administrador.

Abhishek Sakhuja
fuente
0

También me he enfrentado a un problema similar con los siguientes detalles Java 1.8.0_121, Spark spark-1.6.1-bin-hadoop2.6, Windows 10 y Eclipse Oxygen.Cuando ejecuté mi WordCount.java en Eclipse usando HADOOP_HOME como variable del sistema como se mencionó en la publicación anterior, no funcionó, lo que funcionó para mí es -

System.setProperty ("hadoop.home.dir", "RUTA / HACIA / EL / DIR");

PATH / TO / THE / DIR / bin = winutils.exe ya sea que se ejecute dentro de Eclipse como una aplicación Java o mediante spark-submit desde cmd usando

spark-submit --class groupid.artifactid.classname --master local [2] / ruta al archivo jar creado usando maven / ruta a un archivo de prueba de demostración / ruta al comando de directorio de salida

Ejemplo: vaya a la ubicación del contenedor de Spark / home / location / bin y ejecute el envío de chispa como se mencionó,

D: \ BigData \ spark-2.3.0-bin-hadoop2.7 \ bin> spark-submit --class com.bigdata.abdus.sparkdemo.WordCount --master local [1] D: \ BigData \ spark-quickstart \ destino \ spark-quickstart-0.0.1-SNAPSHOT.jar D: \ BigData \ spark-quickstart \ wordcount.txt

Abdus Mondal
fuente
0

Eso es complicado ... Tu carta de almacenamiento debe ser capical. Por ejemplo, " C : \ ..."

Aquiles
fuente