【问题标题】:Why does launching spark-shell with yarn-client fail with "java.lang.ClassNotFoundException: org.apache.hadoop.fs.FSDataInputStream"?为什么使用 yarn-client 启动 spark-shell 失败并显示“java.lang.ClassNotFoundException: org.apache.hadoop.fs.FSDataInputStream”?
【发布时间】:2016-12-27 14:11:38
【问题描述】:

我正在尝试在家中建立一个集群以满足我的个人需求(学习)。首先,我制作了 Hadoop+Yarn。 MR2 正在工作。第二 - 我正在尝试添加 Spark,但收到有关缺少类的错误。

[root@master conf]# spark-shell --master yarn-client
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/fs/FSDataInputStream
...
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.fs.FSDataInputStream

我关注了这些instructions并添加到spark-env.sh

export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop)

更多信息
Cent_OS.86_64
Hadoop 目录:/usr/local/hadoop

Hadoop 版本:

[root@master conf]# hadoop version
Hadoop 2.7.1
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r 15ecc87ccf4a0228f35af08fc56de536e6ce657
Compiled by jenkins on 2015-06-29T06:04Z
Compiled with protoc 2.5.0
From source with checksum fc0a1a23fc1868e4d5ee7fa2b28a58a
This command was run using /usr/local/hadoop/share/hadoop/common/hadoop-common-2.7.1.jar

Manual 说我必须有 2 个变量:HADOOP_CONF_DIR or YARN_CONF_DIR

[root@master conf]# echo $HADOOP_CONF_DIR
/usr/local/hadoop/etc/hadoop
[root@master conf]# echo $YARN_CONF_DIR
/usr/local/hadoop/etc/hadoop

Spark 是 spark-1.5.0-bin-without-hadoop.tgz -> /usr/local/spark

我正在尝试在 hadoop+yarn 启动并可用的同时启动 spark-shell --master yarn-client http://master:50070/dfshealth.html#tab-overview http://master:8088/cluster/apps http://master:19888/jobhistory

如果重要的话,我没有安装 Scala。 任何想法我在 Spark 设置中会错过什么?谢谢。

【问题讨论】:

    标签: hadoop apache-spark hadoop-yarn


    【解决方案1】:

    回答我自己的问题: 首先这是我个人的错误。 打电话给spark-shell 我是从旧的(错误的)地方/opt/cloudera/parcels/CDH-5.4.5-1.cdh5.4.5.p0.7/bin/spark-shell 启动它的。我确信我已经删除了yum remove cloudera* 的所有 CDH 测试。

    [root@master bin]# type spark-shell
    spark-shell is hashed (/usr/bin/spark-shell)
    [root@master bin]# hash -d spark-shell
    

    现在,如果从旧的 spark-1.5.0-bin-without-hadoop.tgz 启动,仍然给我同样的错误。已下载 spark-1.5.0-bin-hadoop2.6,添加了 export SPARK_DIST_CLASSPATH=$HADOOP_HOME - spark-shell 正在运行。

    【讨论】:

      【解决方案2】:

      我收到此错误是因为通过键入 spark-shell/usr/bin/spark-shell 正在被执行。

      为了调用我的特定 spark-shell,我从自己构建的 spark 源内部运行了以下命令 -

      ./bin/spark-shell
      

      【讨论】:

        【解决方案3】:

        下载 Hadoop 2.x 的构建版本之一,而不是 spark-1.5.0-bin-without-hadoop.tgz。它们随 Hadoop 客户端库一起提供,因此设置起来更简单。

        【讨论】:

        • Hadoop 客户端和服务器版本不必匹配。据我所见,任何 2.x 客户端库都适用于 2.x 系统。我想不出你怎么会在那个构建中得到同样的错误,因为它肯定包含那个类。如果你只是在没有参数的情况下运行spark-shell,它会起作用吗?你能从它访问HDFS吗?由于这不是 YARN 错误,因此使用 local 主控而不是 yarn-client 进行调试会更容易。
        猜你喜欢
        • 2014-08-27
        • 1970-01-01
        • 2016-02-20
        • 2016-01-18
        • 2017-10-18
        • 2015-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多