java.io.IOException:找不到Hadoop二进制文件中的可执行文件null \ bin \ winutils.exe。在Windows 7上激发Eclipse

时间:2016-02-26 13:12:02

标签: eclipse scala apache-spark

我无法在spark

上安装的Scala IDE(Maven spark项目)中运行简单的Windows 7作业

已添加Spark核心依赖项。

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

错误:

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>

12 个答案:

答案 0 :(得分:103)

Here可以很好地解释您的解决方案问题。

  1. http://public-repo-1.hortonworks.com/hdp-win-alpha/winutils.exe下载winutils.exe。
  2. 在操作系统级别或以编程方式设置您的HADOOP_HOME环境变量:

    System.setProperty(“hadoop.home.dir”,“winutils文件夹的完整路径”);

  3. 享受

答案 1 :(得分:49)

  1. 下载winutils.exe
  2. 创建文件夹,说C:\winutils\bin
  3. winutils.exe
  4. 内复制C:\winutils\bin
  5. 将环境变量HADOOP_HOME设置为C:\winutils

答案 2 :(得分:21)

按照:

  1. 在任何目录中创建bin文件夹(将在步骤3中使用)。

  2. 下载winutils.exe并将其放在bin目录中。

  3. 现在在代码中添加System.setProperty("hadoop.home.dir", "PATH/TO/THE/DIR");

答案 3 :(得分:4)

如果我们看到以下问题

  

错误Shell:无法在hadoop二进制路径中找到winutils二进制文件

     

java.io.IOException:找不到Hadoop二进制文件中的可执行文件null \ bin \ winutils.exe。

然后执行以下步骤

  1. http://public-repo-1.hortonworks.com/hdp-下载winutils.exe 赢得-α/ winutils.exe。
  2. 并将其保存在您为..e.g创建的任何文件夹的bin文件夹下。 C:\ Hadoop的\ BIN
  3. 并在程序中添加以下行,然后再创建SparkContext或SparkConf System.setProperty(“hadoop.home.dir”,“C:\ Hadoop”);

答案 4 :(得分:2)

在Windows 10上-您应该添加两个不同的参数。

(1)将新变量和值添加为-HADOOP_HOME和系统变量下的路径(即c:\ Hadoop)。

(2)将新条目作为“ C:\ Hadoop \ bin”添加/追加到“ Path”变量中。

以上内容对我有用。

答案 5 :(得分:1)

在系统属性中设置Hadoop_Home环境变量并不适用于我。但这样做了:

  • 在Eclipse Run Configurations环境选项卡中设置Hadoop_Home。
  • 按照&#39; Windows环境设置&#39;来自here

答案 6 :(得分:1)

我在运行单元测试时遇到了同样的问题。我找到了这个解决方案:

以下解决方法允许删除此消息:

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

来自:https://issues.cloudera.org/browse/DISTRO-544

答案 7 :(得分:1)

您也可以从GITHub下载winutils.exe

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

hadoop-2.7.1替换为您想要的版本,并将文件放在D:\hadoop\bin

  

如果您没有环境变量设置的访问权限   在您的计算机上,只需将以下行添加到您的代码中:

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

答案 8 :(得分:1)

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

答案 9 :(得分:0)

除了在HADOOP_HOME中在Windows中提及C:\winutils的环境变量之外,还需要确保您是该计算机的管理员。如果没有,并且添加环境变量会提示您输入管理员凭据(即使在USER变量下),那么在您以管理员身份启动命令提示符后,这些变量将适用。

答案 10 :(得分:0)

我还遇到了类似的问题,具体如下Java 1.8.0_121, Spark spark-1.6.1-bin-hadoop2.6,Windows 10和Eclipse Oxygen。当我使用HADOOP_HOME作为系统变量在Eclipse中运行我的WordCount.java时,如上一篇文章所述,它不起作用,对我有用是 -

System.setProperty(&#34; hadoop.home.dir&#34;,&#34; PATH / TO / THE / DIR&#34;);

PATH / TO / THE / DIR / bin = winutils.exe,无论您是在Eclipse中作为Java应用程序运行,还是使用cmd中的spark-submit运行

spark-submit --class groupid.artifactid.classname --master local [2] /使用maven / path创建的jar文件的路径 到演示测试文件/输出目录命令的路径

示例:转到Spark / home / location / bin的bin位置并执行spark-submit,如上所述,

D:\ BigData \ spark-2.3.0-bin-hadoop2.7 \ bin&gt; 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

答案 11 :(得分:0)

那是一个棘手的问题...您的存储字母必须是大写的。例如“ C :\ ...”