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


91

我无法sparkScala 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>

Answers:


137

是对您的解决方案问题的很好的解释。

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

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

  3. 请享用


14
我必须将HADOOP_HOME设置为hadoop文件夹而不是bin文件夹。
斯坦利

4
另外,请确保根据编译了spark的hadoop版本下载正确的winutils.exe(因此,不一定需要上面的链接)。否则,痛苦等待着:)
NP3

System.setProperty(“ hadoop.home.dir”,“ C:\\ hadoop-2.7.1 \\”)
Shyam Gupta

1
是的,正如@Stanley所说。将HADOOP_HOME设置为hadoop文件夹而不是bin文件夹。
Jazz

@ NP3,你怎么知道那个版本?我正在使用最新的pyspark。谢谢,
-JDPeckham

64
  1. 下载winutils.exe
  2. 创建文件夹,例如 C:\winutils\bin
  3. 复制winutils.exe到里面C:\winutils\bin
  4. 将环境变量设置HADOOP_HOMEC:\winutils

另外,如果您打开了cmd行,请重新启动它以使变量生效。
eych

25

请遵循以下步骤:

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

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

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


2
非常感谢,这正是我在寻找的内容
user373201'2

3
要注意的是,要指向的路径不应包含“ bin”目录。例如:如果winutils.exe的路径为“ D://Hadoop//bin//winutils.exe”,那么hadoop.home.dir的路径应为“ D:// Hadoop”
Keshav Pradeep Ramanath

4

如果我们看到下面的问题

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

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

然后执行以下步骤

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

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

3

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

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

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

以上为我工作。




1

在系统属性中设置Hadoop_Home环境变量对我不起作用。但是这样做:

  • 在“ Eclipse运行配置”环境选项卡中设置Hadoop_Home。
  • 此处开始执行“ Windows环境设置”

0

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


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(“ hadoop.home.dir”,“ PATH / TO / THE / DIR”);

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

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

示例:转到Spark / home / location / bin的bin位置,然后执行提及的spark-submit,

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


0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.