独立的 Hadoop 和 Spark 中的没有真正的区别。要使用 Spark,至少 IO 需要 Hadoop API。
您报告的错误是:
线程“主”java.lang.NoClassDefFoundError 中的异常:
org/apache/hadoop/fs/FSDataInputStream
这通常意味着您没有正确设置路径。
您的文件位于 jar 中,例如 hadoop-hdfs-{version}.jar。
我在我的电脑上看到这个类位于:
${HADOOP_HOME}/share/hadoop/hfs/hadoop-hdfs-2.7.3.jar
请检查所有HADOOP环境变量是否设置正确。最重要的是HADOOP_HOME,正如您在 Linux(很可能在 Windows)上看到的,任何其他变量都依赖于它。
当您使用启动脚本时,它们会设置更多依赖于HADOOP_HOME 的环境变量:
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export HADOOP_ROOT_LOGGERi=INFO,console
export HADOOP_SECURITY_LOGGER=INFO,NullAppender
export HADOOP_INSTALL=$HADOOP_HOME
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_PREFIX=$HADOOP_HOME
export HADOOP_LIBEXEC_DIR=$HADOOP_HOME/libexec
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH
export HADOOP_YARN_HOME=$HADOOP_HOME
要知道你必须使用的 hadoop 类路径是什么:
$ hadoop classpath
/opt/hadoop/etc/hadoop:/opt/hadoop/share/hadoop/common/lib/*:/opt/hadoop/share/hadoop/common/*:/opt/hadoop/share/hadoop/hdfs:/opt/hadoop/share/hadoop/hdfs/lib/*:/opt/hadoop/share/hadoop/hdfs/*:/opt/hadoop/share/hadoop/yarn/lib/*:/opt/hadoop/share/hadoop/yarn/*:/opt/hadoop/share/hadoop/mapreduce/lib/*:/opt/hadoop/share/hadoop/mapreduce/*:/opt/hadoop/contrib/capacity-scheduler/*.jar
并且SPARK_DIST_CLASSPATH 必须设置为此值。阅读this。手动设置值不是一个好主意。
您很可能使用了错误的路径。
在启动 Spark 之前,确保 Hadoop 上的一切正常。