我已经下载了没有hadoop的spark 1.4.0的预构建版本(使用用户提供的Haddop)。当我运行spark-shell命令时,我收到了这个错误:
> Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/fs/
FSDataInputStream
at org.apache.spark.deploy.SparkSubmitArguments$$anonfun$mergeDefaultSpa
rkProperties$1.apply(SparkSubmitArguments.scala:111)
at org.apache.spark.deploy.SparkSubmitArguments$$anonfun$mergeDefaultSpa
rkProperties$1.apply(SparkSubmitArguments.scala:111)
at scala.Option.getOrElse(Option.scala:120)
at org.apache.spark.deploy.SparkSubmitArguments.mergeDefaultSparkPropert
ies(SparkSubmitArguments.scala:111)
at org.apache.spark.deploy.SparkSubmitArguments.<init>(SparkSubmitArgume
nts.scala:97)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:106)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.fs.FSDataInputStr
eam
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 7 more
我在互联网上搜索过,据说HADOOP_HOME尚未在spark-env.cmd中设置。但我在spark安装文件夹中找不到spark-env.cmd。 我已经跟踪了spark-shell命令,似乎那里没有HADOOP_CONFIG。我已尝试在环境变量上添加HADOOP_HOME,但它仍然提供相同的异常。
实际上我并没有真正使用hadoop。我按照this question
中的建议下载了hadoop作为解决方法我使用的是Windows 8和scala 2.10。
任何帮助将不胜感激。感谢。
答案 0 :(得分:40)
Spark的构建名称中的“without Hadoop”具有误导性:它意味着构建不依赖于特定的Hadoop发行版,而不是没有它的情况下运行:用户应指明在哪里找到Hadoop(参见{ {3}})
解决此问题的一种简洁方法是:
spark-env.cmd
文件,如下所示(修改Hadoop路径以匹配您的安装):
@echo off
set HADOOP_HOME=D:\Utils\hadoop-2.7.1
set PATH=%HADOOP_HOME%\bin;%PATH%
set SPARK_DIST_CLASSPATH=<paste here the output of %HADOOP_HOME%\bin\hadoop classpath>
spark-env.cmd
放在位于与Spark基本文件夹相同级别的conf
文件夹中(可能看起来很奇怪),或放在SPARK_CONF_DIR
环境变量指示的文件夹中答案 1 :(得分:18)
我遇到了同样的问题,事实上它在Spark的入门页面中提到了如何处理它:
### in conf/spark-env.sh ###
# If 'hadoop' binary is on your PATH
export SPARK_DIST_CLASSPATH=$(hadoop classpath)
# With explicit path to 'hadoop' binary
export SPARK_DIST_CLASSPATH=$(/path/to/hadoop/bin/hadoop classpath)
# Passing a Hadoop configuration directory
export SPARK_DIST_CLASSPATH=$(hadoop --config /path/to/configs classpath)
如果您想使用自己的hadoop,请按照以下3个选项中的一个选项,将其复制并粘贴到spark-env.sh
文件中:
1-如果你的PATH上有hadoop
2-你想明确地显示hadoop二进制文件
3-您还可以显示hadoop配置文件夹
答案 2 :(得分:14)
我也有这个问题,
export SPARK_DIST_CLASSPATH=`hadoop classpath`
解决了这个问题。
答案 3 :(得分:5)
我在尝试熟悉火花时遇到了同样的错误。我对错误信息的理解是,虽然spark不需要运行hadoop集群,但它确实需要一些hadoop类。由于我只是在玩火花并且不关心使用什么版本的hadoop库,我刚刚下载了一个预先构建的带有hadoop(2.6)版本的spark二进制文件,并且开始工作正常。
答案 4 :(得分:3)
输入SPARK_HOME - &gt; CONF
复制spark-env.sh.template文件并将其重命名为spark-env.sh 在此文件中,您可以设置spark的参数。
答案 5 :(得分:2)
的Linux
ENV SPARK_DIST_CLASSPATH="$HADOOP_HOME/etc/hadoop/*:$HADOOP_HOME/share/hadoop/common/lib/*:$HADOOP_HOME/share/hadoop/common/*:$HADOOP_HOME/share/hadoop/hdfs/*:$HADOOP_HOME/share/hadoop/hdfs/lib/*:$HADOOP_HOME/share/hadoop/hdfs/*:$HADOOP_HOME/share/hadoop/yarn/lib/*:$HADOOP_HOME/share/hadoop/yarn/*:$HADOOP_HOME/share/hadoop/mapreduce/lib/*:$HADOOP_HOME/share/hadoop/mapreduce/*:$HADOOP_HOME/share/hadoop/tools/lib/*"
窗
set SPARK_DIST_CLASSPATH=%HADOOP_HOME%\etc\hadoop\*;%HADOOP_HOME%\share\hadoop\common\lib\*;%HADOOP_HOME%\share\hadoop\common\*;%HADOOP_HOME%\share\hadoop\hdfs\*;%HADOOP_HOME%\share\hadoop\hdfs\lib\*;%HADOOP_HOME%\share\hadoop\hdfs\*;%HADOOP_HOME%\share\hadoop\yarn\lib\*;%HADOOP_HOME%\share\hadoop\yarn\*;%HADOOP_HOME%\share\hadoop\mapreduce\lib\*;%HADOOP_HOME%\share\hadoop\mapreduce\*;%HADOOP_HOME%\share\hadoop\tools\lib\*
答案 6 :(得分:1)
在运行spark-submit之前,从软件包目录中运行以下内容-
export SPARK_DIST_CLASSPATH=`hadoop classpath`
答案 7 :(得分:0)
我终于找到了一个删除异常的解决方案。
在spark-class2.cmd中,添加:
set HADOOP_CLASS1=%HADOOP_HOME%\share\hadoop\common\*
set HADOOP_CLASS2=%HADOOP_HOME%\share\hadoop\common\lib\*
set HADOOP_CLASS3=%HADOOP_HOME%\share\hadoop\mapreduce\*
set HADOOP_CLASS4=%HADOOP_HOME%\share\hadoop\mapreduce\lib\*
set HADOOP_CLASS5=%HADOOP_HOME%\share\hadoop\yarn\*
set HADOOP_CLASS6=%HADOOP_HOME%\share\hadoop\yarn\lib\*
set HADOOP_CLASS7=%HADOOP_HOME%\share\hadoop\hdfs\*
set HADOOP_CLASS8=%HADOOP_HOME%\share\hadoop\hdfs\lib\*
set CLASSPATH=%HADOOP_CLASS1%;%HADOOP_CLASS2%;%HADOOP_CLASS3%;%HADOOP_CLASS4%;%HADOOP_CLASS5%;%HADOOP_CLASS6%;%HADOOP_CLASS7%;%HADOOP_CLASS8%;%LAUNCH_CLASSPATH%
然后,改变:
"%RUNNER%" -cp %CLASSPATH%;%LAUNCH_CLASSPATH% org.apache.spark.launcher.Main %* > %LAUNCHER_OUTPUT%
到:
"%RUNNER%" -Dhadoop.home.dir=*hadoop-installation-folder* -cp %CLASSPATH% %JAVA_OPTS% %*
它对我很好,但我不确定这是最好的解决方案。
答案 8 :(得分:0)
非常感谢你。这很好用,但我不得不将火花罐添加到类路径中: ; C:\火花\ lib中* 此外,cmd文件的最后一行缺少单词&#34; echo&#34 ;;所以它应该说: echo%SPARK_CMD%
答案 9 :(得分:0)
我有同样的问题....线程“main”中的异常java.lang.NoClassDefFoundError:org / apache / hadoop / fs / FSDataInputStream 在org.apache.spark.deploy.SparkSubmitArguments $$ anonfun $ mergeDefaultSpa rkProperties $ 1.适用(SparkSubmitArguments.scala:111)... 然后我意识到我已经安装了没有hadoop的火花版本。我安装了“with-hadoop”版本问题就消失了。
答案 10 :(得分:0)
我的案例
本地运行spark作业与在集群上运行它不同。在群集上,您可能需要遵循不同的依赖关系/上下文。所以基本上在你的pom.xml中你可能有依赖声明为provided
。
在本地运行时,您不需要这些provided
依赖项。只是取消注释并再次重建。
答案 11 :(得分:0)
我遇到了同样的错误。我想在我的Windows PC上安装spark,因此下载了没有hadoop版本的spark,但事实证明你需要hadoop库!所以下载任何hadoop spark版本并设置环境变量。
答案 12 :(得分:0)
我收到此错误,因为该文件是从Windows复制的。 使用
解决它dos2unix file_name
答案 13 :(得分:0)
您应该在代码中添加以下jar:
答案 14 :(得分:0)
我认为你需要 maven 的 spark-core 依赖。对我来说效果很好。