【问题标题】:The difference between a hadoop installed by standalone and a hadoop included in spark?独立安装的hadoop和spark中包含的hadoop之间的区别?
【发布时间】:2018-05-05 16:40:51
【问题描述】:

我是 Hadoop 和 Spark 领域的新手。作为教程,我想将一些数据添加到 Hadoop 并在 Spark 中查询。因此,我按照this 独立安装了 Hadoop,并下载了不包含 Hadoop 的 Spark 版本。但我收到了一个类似this 的错误。我尝试将类路径设置为我安装的 Hadoop 文件夹。类路径是这样的:

SPARK_DIST_CLASSPATH=%HADOOP_HOME%\share\hadoop\tools\lib\* 

除此之外,我跟踪了 Spark 源并在 the source 中找到了对环境变量 SPARK_DIST_CLASSPATH 的引用。我仍然遇到错误,并且不可避免地,我安装了包含 Hadoop 的 Spark。我很好奇我是否有其他限制。

【问题讨论】:

    标签: apache-spark hadoop2


    【解决方案1】:

    独立的 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 上的一切正常。

    【讨论】:

    • 所以,你的意思是我应该列出所有文件夹,包括所有 jars?
    • 只有hadoop使用的那个。使用hadoop class 获取您真正需要的路径。
    • 我在 Windows 10 中尝试这个。找不到“hadoop 类”。有没有其他选择?
    • 我在之前的回答中打错了,抱歉。使用hadoop classpath。你也可以试试hdfs classpath
    • 谢谢你,上个版本我也成功了!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 1970-01-01
    • 2015-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多