java.io.IOException: Não foi possível localizar o executável null \ bin \ winutils.exe nos binários do Hadoop. faísca Eclipse no Windows 7

91

Não consigo executar um sparktrabalho simples em Scala IDE(projeto Maven Spark) instalado emWindows 7

A dependência do núcleo do Spark foi adicionada.

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

Erro:

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
fonte

Respostas:

137

Aqui está uma boa explicação do seu problema com a solução.

  1. Baixe winutils.exe em http://public-repo-1.hortonworks.com/hdp-win-alpha/winutils.exe .
  2. Configure sua variável de ambiente HADOOP_HOME no nível do sistema operacional ou programaticamente:

    System.setProperty ("hadoop.home.dir", "caminho completo para a pasta com winutils");

  3. Aproveitar

Taky
fonte
14
Tenho que definir HADOOP_HOME para a pasta hadoop em vez da pasta bin.
Stanley
4
Além disso, certifique-se de baixar o winutils.exe correto com base na versão do hadoop para a qual o Spark foi compilado (portanto, não necessariamente o link acima). Caso contrário, a dor o aguarda :)
NP3
System.setProperty ("hadoop.home.dir", "C: \\ hadoop-2.7.1 \\")
Shyam Gupta
1
sim exatamente como @Stanley diz. trabalhou na configuração de HADOOP_HOME para a pasta hadoop em vez da pasta bin.
Jazz de
@ NP3 e ​​como você conhece essa versão? Estou usando o pyspark mais recente. Obrigado,
JDPeckham
64
  1. Baixe winutils.exe
  2. Criar pasta, digamos C:\winutils\bin
  3. Copie winutils.exedentroC:\winutils\bin
  4. Definir variável de ambiente HADOOP_HOMEparaC:\winutils
Deokant Gupta
fonte
além disso, se você tiver uma linha cmd aberta, reinicie-a para que as variáveis ​​tenham efeito.
eych de
25

Siga isso:

  1. Crie uma binpasta em qualquer diretório (para ser usado na etapa 3).

  2. Baixe winutils.exe e coloque-o no diretório bin.

  3. Agora adicione System.setProperty("hadoop.home.dir", "PATH/TO/THE/DIR");seu código.

Ani Menon
fonte
2
Muito obrigado, exatamente o que eu estava procurando
user373201
3
Deve-se notar que o caminho a ser apontado não deve incluir o diretório 'bin'. Ex: se o caminho em que winutils.exe for "D: //Hadoop//bin//winutils.exe", o caminho para hadoop.home.dir deverá ser "D: // Hadoop"
Keshav Pradeep Ramanath
4

se vemos o problema abaixo

ERROR Shell: falha ao localizar o binário winutils no caminho binário hadoop

java.io.IOException: Não foi possível localizar o executável null \ bin \ winutils.exe nos binários do Hadoop.

então faça os seguintes passos

  1. baixe winutils.exe em http://public-repo-1.hortonworks.com/hdp- win-alpha / winutils.exe.
  2. e mantenha-o na pasta bin de qualquer pasta que você criou para.eg C: \ Hadoop \ bin
  3. e no programa adicione a seguinte linha antes de criar SparkContext ou SparkConf System.setProperty ("hadoop.home.dir", "C: \ Hadoop");
Prem S
fonte
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
fonte
3

No Windows 10 - você deve adicionar dois argumentos diferentes.

(1) Adicione a nova variável e valor como - HADOOP_HOME e caminho (ou seja, c: \ Hadoop) em Variáveis ​​do sistema.

(2) Adicione / anexe uma nova entrada à variável "Caminho" como "C: \ Hadoop \ bin".

O acima funcionou para mim.

user1023627
fonte
2

Tive o mesmo problema ao executar testes de unidade. Eu encontrei esta solução alternativa:

A seguinte solução alternativa permite eliminar esta mensagem:

    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
fonte
2

Você também pode fazer o download winutils.exeno GITHub:

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

substitua hadoop-2.7.1pela versão desejada e coloque o arquivo noD:\hadoop\bin

Se você não tiver direitos de acesso às configurações da variável de ambiente em sua máquina, basta adicionar a linha abaixo ao seu código:

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

Definir a variável de ambiente Hadoop_Home nas propriedades do sistema não funcionou para mim. Mas isso fez:

  • Defina Hadoop_Home na guia de ambiente Eclipse Run Configurations.
  • Siga a 'Configuração do Ambiente Windows' daqui
Ramya
fonte
0

Além de mencionar sua variável de ambiente para HADOOP_HOMEno windows as C:\winutils, você também precisa se certificar de que é o administrador da máquina. Caso contrário, a adição de variáveis ​​de ambiente solicitará credenciais de administrador (mesmo em USERvariáveis), então essas variáveis ​​serão aplicáveis ​​assim que você iniciar seu prompt de comando como administrador.

Abhishek Sakhuja
fonte
0

Também enfrentei o problema semelhante com os seguintes detalhes Java 1.8.0_121, Spark spark-1.6.1-bin-hadoop2.6, Windows 10 e Eclipse Oxygen. Quando executei meu WordCount.java no Eclipse usando HADOOP_HOME como uma variável de sistema conforme mencionado no post anterior, não funcionou, o que funcionou para mim é -

System.setProperty ("hadoop.home.dir", "PATH / TO / THE / DIR");

PATH / TO / THE / DIR / bin = winutils.exe se você executar no Eclipse como um aplicativo Java ou por spark-submit do cmd usando

spark-submit --class groupid.artifactid.classname --master local [2] / caminho para o arquivo jar criado usando maven / caminho para um arquivo de teste de demonstração / caminho para o comando do diretório de saída

Exemplo: Vá para o local do depósito de Spark / home / location / bin e execute o envio do spark conforme mencionado,

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 \ target \ spark-quickstart-0.0.1-SNAPSHOT.jar D: \ BigData \ spark-quickstart \ wordcount.txt

Abdus Mondal
fonte
0

Essa é complicada ... Sua carta de armazenamento deve ser capical. Por exemplo " C : \ ..."

Aquiles
fonte