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\\");
- Java中Spark MLlib中的矩阵运算
- 如何在Spark中将JavaPairInputDStream转换为DataSet / DataFrame
- Spark流式传输DStream RDD以获取文件名
- 为什么启动StreamingContext失败并出现“IllegalArgumentException:要求失败:没有注册输出操作,所以无需执行”?
- 使用–jars的spark-submit yarn-cluster不起作用?
- Spark SQL失败,因为“常量池已超过JVM限制0xFFFF”
- 如何更新火花流中的广播变量?
- LogisticRegression的Spark MLLib TFIDF实现
- 如何使用纯Java生成Parquet文件(包括日期和小数类型)并上传到S3 (无HDFS)