我知道有一个非常相似的帖子(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
阅读此帖后 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%
但是当我尝试代码时仍会出现相同的错误。有谁知道如何解决这个问题?
答案 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");
答案 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