没有Hadoop就无法运行Apache Spark

时间:2016-11-23 02:53:33

标签: apache-spark

installed本地DEV盒上的spark-2.0.2-bin-without-hadoop.tgz包但未能run下面的<{p}}

$ ./bin/spark-shell
NoClassDefFoundError: org/apache/hadoop/fs/FSDataInputStream

$ ./sbin/start-master.sh
NoClassDefFoundError: org/slf4j/Logger

我是否误解了Spark可以在下面旋转without Hadoop

“我需要Hadoop来运行Spark吗? 不,但如果您在群集上运行,则需要某种形式的共享文件系统(例如,NFS安装在每个节点上的相同路径上)。如果您有这种类型的文件系统,则可以在独立模式下部署Spark。“

2 个答案:

答案 0 :(得分:4)

关于FSDataInputStream的第一个问题,如此Stack Overflow响应https://stackoverflow.com/a/31331528中所述,

  

“没有Hadoop”有点误导,因为这个Spark版本没有绑定到Hadoop的特定版本,而不是没有它运行。要使用“without Hadoop”版本运行Spark,您应该将其绑定到您自己的Hadoop发行版。

关于缺少SLF4J的第二个问题,如此Stack Overflow响应https://stackoverflow.com/a/39277696中所述 - 您可以包含SLF4J jar,或者如果您已经安装了Hadoop发行版,那么您应该已经启动并运行了它。

说到这里,您可以下载使用Hadoop预构建的Apache Spark,而不是使用Hadoop本身。它包含所有必需的jar,您可以指定Spark从文件系统中读取,例如访问数据时使用[ { '_id': '18f292072b7555965e0f61a0331a3a43', assets: [ { "_id": "8ed6dc473e331d895ecbdea7f9bbd55e", "created": 1479463428837247, "updated": 1479463428837247, "catalog_id": "4b5ce056175151e3f0aa1741eedb7f12", "albums": { "id": "18f292072b7555965e0f61a0331a3a43", "order": "D1" } }, { "_id": "aec701d23dfe5f3a100d678e1a04f716", "created": 1479463428902155, "updated": 1479463428902155, "catalog_id": "4b5ce056175151e3f0aa1741eedb7f12", "albums": { "id": "18f292072b7555965e0f61a0331a3a43", "order": "D2" } }, { "_id": "b2fe8f9dcf8f3f92f6396cfa574ef71c", "created": 1479463428971650, "updated": 1479463428971650, "catalog_id": "4b5ce056175151e3f0aa1741eedb7f12", "albums": { "id": "18f292072b7555965e0f61a0331a3a43", "order": "E1" } } ], { "_id": "78c72b85944e5085a4a3be77a2d175fe", "assets": [ { "_id": "050b550fb23bf780f93eec43cbc667f1", "created": 1479463428065297, "updated": 1479463428065297, "catalog_id": "4b5ce056175151e3f0aa1741eedb7f12", "albums": { "id": "78c72b85944e5085a4a3be77a2d175fe", "order": "D1" } }, { "_id": "dc54279bc0318f41808b65d1fe7142b2", "created": 1479463428134560, "updated": 1479463428134560, "catalog_id": "4b5ce056175151e3f0aa1741eedb7f12", "albums": { "id": "78c72b85944e5085a4a3be77a2d175fe", "order": "D2" } } ] } ] (而不是HDFS)。

答案 1 :(得分:1)

是的,从 Spark 的 downloads page 开始,截至今天,对于 Spark 3.1.1,存在以下包类型可供下载:

  1. 为 Apache Hadoop 2.7 预构建
<块引用>

这个 (spark-3.1.1-bin-hadoop2.7.tgz) 版本的 spark 在 Hadoop 2.7 上运行

  1. 为 Apache Hadoop 3.2 及更高版本预构建
<块引用>

这个 (spark-3.1.1-bin-hadoop3.2.tgz) 版本的 spark 运行于 Hadoop 3.2 及更高版本

  1. 使用用户提供的 Apache Hadoop 预先构建
<块引用>

这个 (spark-3.1.1-bin-without-hadoop.tgz) 版本的 spark 可以与任何用户提供的 Hadoop 版本一起运行。

从上一个版本(spark-3.1.1-bin-without-hadoop.tgz)的名称来看,我们似乎需要这个spark版本(即3.)而不是其他版本(即, 1. 和 2.)。然而,命名是模棱两可的。只有当我们想要支持 HDFS 和 YARN 时,我们才需要 Hadoop。在独立模式下,Spark 可以在没有 Hadoop 的情况下在真正的分布式环境中运行(或在单台机器上运行守护进程)。

对于 1. 和 2.,您可以在不安装 Hadoop 的情况下运行 Spark,因为一些核心 Hadoop 库与 spark 预构建二进制文件捆绑在一起,因此 spark-shell 可以正常工作而不会引发任何异常);对于 3.,除非提供 HADOOP 安装,否则 spark 将无法工作(因为 3. 没有 Hadoop 运行时)。

本质上,

  • 如果我们想支持 HDFS 和 YARN,我们将需要在所有三种情况下(1.、2. 和 3.)分别安装 Hadoop
  • 如果我们不想安装 Hadoop,我们可以使用带有 hadoop 的预构建 Spark 并在独立模式下运行 Spark
  • 如果我们想在 Spark 中使用任何版本的 Hadoop,那么 3. 应该与单独安装的 Hadoop 一起使用

有关详细信息,请参阅文档中的 this

<块引用>

您可以下载两种 Spark 二进制发行版的变体。一种是使用特定版本的 Apache Hadoop 预先构建的;这个 Spark 发行版包含内置的 Hadoop 运行时,所以我们称之为 with-hadoop Spark 发行版。另一个是使用用户提供的 Hadoop 预先构建的;由于这个 Spark 发行版不包含内置的 Hadoop 运行时,所以它更小,但用户必须单独提供 Hadoop 安装。我们称这种变体为 no-hadoop Spark 发行版。对于with-hadoop Spark发行版,由于它已经包含了一个内置的Hadoop运行时,默认情况下,当一个作业提交到Hadoop Yarn集群时,为了防止jar冲突,它不会将Yarn的类路径填充到Spark中......