【问题标题】:java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries. spark Eclipse on windows 7java.io.IOException:在 Hadoop 二进制文件中找不到可执行的 null\bin\winutils.exe。在 Windows 7 上触发 Eclipse
【发布时间】:2016-06-09 17:23:19
【问题描述】:

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

已添加 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>

【问题讨论】:

    标签: eclipse scala apache-spark


    【解决方案1】:

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

    1. https://github.com/steveloughran/winutils下载winutils.exe版本。

    2. 在操作系统级别或以编程方式设置您的 HADOOP_HOME 环境变量:

      System.setProperty("hadoop.home.dir", "full path to the folder with winutils");

    3. 享受

    【讨论】:

    • 我必须将 HADOOP_HOME 设置为 hadoop 文件夹而不是 bin 文件夹。
    • 另外,请务必根据编译 spark 的 hadoop 版本下载正确的 winutils.exe(因此,不一定是上面的链接)。否则,痛苦等待:)
    • System.setProperty("hadoop.home.dir", "C:\\hadoop-2.7.1\\")
    • 是的,正如@Stanley 所说。将 HADOOP_HOME 设置为 hadoop 文件夹而不是 bin 文件夹。
    • @NP3 你怎么知道那个版本的?我正在使用最新的 pyspark。谢谢,
    【解决方案2】:
    1. 下载 winutils.exe
    2. 创建文件夹,比如C:\winutils\bin
    3. 复制winutils.exeC:\winutils\bin里面
    4. 将环境变量HADOOP_HOME设置为C:\winutils

    【讨论】:

    • 另外,如果您打开了 cmd 行,请重新启动它以使变量生效。
    【解决方案3】:

    按照这个:

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

    2. 下载winutils.exe,放到bin目录下。

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

    【讨论】:

    • 非常感谢,正是我要找的东西
    • 需要注意的是,要指向的路径不应该包括'bin'目录。例如:如果 winutils.exe 的路径是 "D://Hadoop//bin//winutils.exe" ,那么 hadoop.home.dir 的路径应该是 "D://Hadoop"
    • 您好,我按照上述步骤操作,但我得到了WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties(PS:我在 Pycharm 中使用 Pyspark 2.4.4)
    【解决方案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")"
    

    【讨论】:

      【解决方案5】:

      如果我们看到以下问题

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

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

      然后执行以下步骤

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

      【讨论】:

        【解决方案6】:

        您也可以从 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");
        

        【讨论】:

          【解决方案7】:

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

          (1) 在 System Variables 下添加新变量和值作为 - HADOOP_HOME 和路径(即 c:\Hadoop)。

          (2) 将新条目添加/附加到“路径”变量作为“C:\Hadoop\bin”。

          以上对我有用。

          【讨论】:

            【解决方案8】:

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

            以下解决方法可以消除此消息:

                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

            【讨论】:

              【解决方案9】:

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

              • 在 Eclipse 运行配置环境选项卡中设置 Hadoop_Home。
              • 按照here 中的“Windows 环境设置”进行操作

              【讨论】:

                【解决方案10】:

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

                【讨论】:

                  【解决方案11】:

                  以下细节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 从 cmd 提交 spark-submit

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

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

                  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

                  【讨论】:

                    【解决方案12】:
                    • 在您的 Windows 机器上下载 winutils.exe 和 hadoop.dll
                    • 创建文件夹C:\hadoop\bin
                    • 将 winutils.exe 和 hadoop.dll 复制到新建的 hadoop 文件夹中
                    • 设置环境变量 HADOOP_HOME=C:\hadoop

                    【讨论】:

                      【解决方案13】:

                      这是一个棘手的问题...你的存储信一定是大写的。例如“C:\...”

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2017-04-26
                        • 1970-01-01
                        • 2013-03-24
                        相关资源
                        最近更新 更多