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

我知道有一个非常相似的post( 无法在hadoop二进制路径中找到winutils二进制文件 ),但是,我已经尝试了建议的每一步,但仍然出现相同的错误。

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

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

但是,此错误不断出现: 在此处输入图像描述

阅读本文后, 无法在hadoop二进制路径中找到winutils二进制文件

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

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

并将它放在路径上,如下所示:%HADOOP_HOME%

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

如果您在使用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/

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

从这里下载bin文件Hadoop Bin然后是System.setProperty("hadoop.home.dir", "Desktop\bin");

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

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

代替

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

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

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

以下错误是由于在运行Spark应用程序时类路径中缺少winutils二进制文件。 Winutils是Hadoop生态系统的一部分,不包含在Spark中。 即使抛出exception,应用程序的实际function也可能正确运行。 但最好是让它到位以避免不必要的问题。 为了避免错误,请下载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() { 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\\");