Spark 1.6-无法在hadoop二进制路径中找到winutils二进制文件

时间:2016-01-09 19:11:44

标签: java hadoop apache-spark

我知道有一个非常相似的帖子(Failed to locate the winutils binary in the hadoop binary path),但是,我已经尝试了建议的每个步骤,但仍然出现相同的错误。

我正在尝试在Windows 7上使用Apache Spark版本1.6.0来执行此页面上的教程http://spark.apache.org/docs/latest/streaming-programming-guide.html,具体使用此代码:

./bin/run-example streaming.JavaNetworkWordCount localhost 9999

但是,此错误一直出现: enter image description here

阅读此帖后 Failed to locate the winutils binary in the hadoop binary path

我意识到我需要winutils.exe文件,所以我用它下载了一个hadoop二进制2.6.0,定义了一个名为HADOOP_HOME的环境变量:

 with value C:\Users\GERAL\Desktop\hadoop-2.6.0\bin  

并将其放在Path上,如下所示:%HADOOP_HOME%

但是当我尝试代码时仍会出现相同的错误。有谁知道如何解决这个问题?

6 个答案:

答案 0 :(得分:20)

如果您在使用Hadoop的Windows上运行Spark,则需要确保已正确安装Windows hadoop安装。要运行spark,你需要在你的hadoop主目录bin文件夹中安装winutils.exe和winutils.dll。

我会请你先试试这个:

1)您可以从下面的链接中下载捆绑包中的.dll和.exe文件。

https://codeload.github.com/sardetushar/hadooponwindows/zip/master

2)将winutils.exe和winutils.dll从该文件夹复制到$ HADOOP_HOME / bin。

3)在spark-env.sh或命令中设置HADOOP_HOME,然后将HADOOP_HOME/bin添加到PATH

然后尝试运行。

如果您需要有关hadoop安装帮助的任何帮助,有一个很好的链接,您可以尝试一下。

http://toodey.com/2015/08/10/hadoop-installation-on-windows-without-cygwin-in-10-mints/

但是,那可以等。你可以尝试前几个步骤。

答案 1 :(得分:3)

从此处Hadoop Bin然后System.setProperty("hadoop.home.dir", "Desktop\bin");

下载bin文件

答案 2 :(得分:1)

您可以尝试将HADOOP_HOME环境变量设置为:

C:\Users\GERAL\Desktop\hadoop-2.6.0

而不是

C:\Users\GERAL\Desktop\hadoop-2.6.0\bin  

答案 3 :(得分:0)

我尝试从Windows笔记本电脑启动spark-shell时也遇到了这个问题。我解决了这个问题,它对我有用,希望它会有所帮助。这是我犯的一个非常小的错误 - 我将winutils可执行文件保存为“winutils.exe”而不是winutils。

因此,当变量得到解决时,它已经解析为winutils.exe.exe,它在Hadoop二进制文件中无处可去。我删除了“.exe”并触发了shell,它运行了。我建议你看看它被保存的名称。

答案 4 :(得分:0)

以下错误是由于在运行Spark应用程序时类路径中缺少winutils二进制文件。 Winutils是Hadoop生态系统的一部分,不包含在Spark中。即使抛出异常,应用程序的实际功能也可能正确运行。但最好是让它到位以避免不必要的问题。为了避免错误,请下载winutils.exe二进制文件并将其添加到类路径中。

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.Function;

public class SparkTestApp{

    public static void main(String[] args) {

            System.setProperty("hadoop.home.dir", "ANY_DIRECTORY");

    // Example
    // winutils.exe is copied to C:\winutil\bin\
    // System.setProperty("hadoop.home.dir", "C:\\winutil\\");
            String logFile = "C:\\sample_log.log";
            SparkConf conf = new SparkConf().setAppName("Simple Application").setMaster("local");
            JavaSparkContext sc = new JavaSparkContext(conf);
            JavaRDD logData = sc.textFile(logFile).cache();

            long numAs = logData.filter(new Function<String, Boolean>() {
                public Boolean call(String s) {
                        return s.contains("a");
                }
            }).count();

            System.out.println("Lines with a: " + numAs);

    }

}

如果将winutils.exe复制到C:\winutil\bin\

然后setProperty如下

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

答案 5 :(得分:0)

安装JDK 1.8,从Apache Git存储库中的Apache Spark&Winutils下载Spark Binary

设置JDK,Spark二进制文件,Winutils的用户变量路径

JAVA_HOME C:\ Program Files \ Java \ jdk1.8.0_73 HADOOP_HOME C:\ Hadoop SPARK_HOME C:\ spark-2.3.1-bin-hadoop2.7 路径 C:\ Program Files \ Java \ jdk1.8.0_73 \ bin;%HADOOP_HOME%\ bin;%SPARK_HOME%\ bin;

打开命令提示符并运行spark-shell

Spark Shell