【问题标题】:What is the relationship between Spark, Hadoop and CassandraSpark、Hadoop和Cassandra是什么关系
【发布时间】:2015-09-14 10:09:42
【问题描述】:

我的理解是 Spark 是 Hadoop 的替代品。但是,当尝试安装 Spark 时,安装页面会要求安装现有的 Hadoop。我找不到任何可以澄清这种关系的东西。

其次,Spark 显然与 Cassandra 和 Hive 具有良好的连接性。两者都有sql风格的界面。但是,Spark 有自己的 sql。为什么要使用 Cassandra/Hive 而不是 Spark 的原生 sql?假设这是一个没有现有安装的全新项目?

【问题讨论】:

    标签: hadoop cassandra apache-spark apache-spark-sql


    【解决方案1】:

    Spark 是一个分布式内存处理引擎。它不需要与 Hadoop 配对,但由于 Hadoop 是最流行的大数据处理工具之一,Spark 旨在在该环境中很好地工作。例如,Hadoop 使用 HDFS(Hadoop 分布式文件系统)来存储其数据,因此 Spark 能够从 HDFS 读取数据,并将结果保存在 HDFS 中。

    为了提高速度,Spark 将其数据集保存在内存中。它通常会通过从持久存储(例如 HDFS、Hbase、Cassandra 数据库等)加载数据来启动作业。一旦加载到内存中,Spark 可以对数据集运行许多转换以计算所需的结果。然后通常将最终结果写回持久存储。

    就它作为 Hadoop 的替代品而言,在某些操作上它可以比 Hadoop 快得多。例如,由于避免了 Hadoop 的大部分磁盘 I/O,Spark 中的多通道 map reduce 操作可以比 Hadoop map reduce 快得多。 Spark 可以读取为 Apache Hive 格式化的数据,因此 Spark SQL 可以比使用 HQL(Hive 查询语言)快得多。

    Cassandra 有自己的原生查询语言,称为 CQL(Cassandra 查询语言),但它只是完整 SQL 的一小部分,对于聚合和即席查询之类的事情非常糟糕。因此,当 Spark 与 Cassandra 搭配使用时,它提供了功能更丰富的查询语言,并允许您进行原生 CQL 不提供的数据分析。

    Spark 的另一个用例是流处理。可以设置 Spark 以摄取传入的实时数据并进行微批量处理,然后将结果保存到持久存储中,例如 HDFS、Cassandra 等。

    因此,spark 确实是一个独立的内存系统,可以与许多不同的分布式数据库和文件系统配对,以增加性能、更完整的 SQL 实现以及它们可能缺少这种流处理的功能。

    【讨论】:

    • 绝妙的答案!在 Hive 与 Spark SQL 的前面,提到 Hive 正在处理adopting Spark as its execution backend(作为 MapReduce 的替代方案)可能是有见地的。我认为在这一点上 Hive 和 Spark SQL 之间的区别只是查询执行计划器的实现。
    • 我假设 Spark 的 RDD 存储在 HDFS 上,并且它可能使用了 hadoop 的 zookeeper 和其他基础设施。您似乎(@Jim Meyer)似乎在暗示 spark 没有硬依赖,并且 spark 与这些组件有自己的对应部分?
    • 另外,我一直在阅读有关 spark 是内存系统的信息。我正在寻找一个每天处理大约两个 terra 字节(压缩)数据的系统。即使使用计算机集群,我也无法将其保存在内存中。如果我需要让磁盘发挥作用,那会在哪里留下火花?它是否会失去与 hadoop/cassandra/hive 相比的优势,还是仍然可以提供一些东西?
    • Spark 喜欢使用大量内存。如果您的数据不能全部放入内存,Spark 将不得不从内存中逐出一些数据,这当然会降低性能。要每天处理 2TB,您通常会将其分解为比一天更小的处理块(例如,一次处理一小时等)
    【解决方案2】:

    我正在为大学写一篇关于 Hadoop 的论文。偶然发现了你的问题。 Spark 只是将 Hadoop 用于持久性,并且仅在您想使用它时才使用。可以将它与 Amazon EC2 等其他持久层一起使用。

    另一方面,spark 是在内存中运行的,它并不是主要构建用于像 Hadoop was/is 这样的 map reduce 用例。

    我可以推荐这篇文章,如果你喜欢更详细的描述:https://www.xplenty.com/blog/2014/11/apache-spark-vs-hadoop-mapreduce/

    【讨论】:

    • 好文章。你提到火花可以在独立模式下运行。但是,他们自己的下载页面并没有给我这个选项。这就是混乱的开始。所有下载选项参考 hadoop!
    • 您还提到 spark 应该具有与正在处理的数据相等的内存。然而,spark 的登录页面声称基于磁盘的处理比 hadoop 提高了 10 倍(基于内存的处理提高了 100 倍)。您是否发现他们也为基于磁盘的数据提供了一些有趣的东西?对于海量数据,他们有 hdfs 的替代品吗?
    • 我知道答案有点晚了,但我压力很大。我的话题更多的是hadoop方面,火花刚刚出现,所以我不确定它是将整个数据加载到内存中还是仅加载部分,但我认为第二点更合理。关于我的结论,我认为您不需要相同数量的内存存储空间,但您需要很多。我认为仔细研究这个话题很有趣。
    【解决方案3】:

    Spark 中的 README.md 文件可以解决你的难题:

    关于 Hadoop 版本的说明

    Spark 使用 Hadoop 核心库与 HDFS 和其他 Hadoop 支持的库进行通信 存储系统。因为协议在不同版本的 Hadoop,您必须针对集群运行的相同版本构建 Spark。

    请参阅构建文档 "Specifying the Hadoop Version" 有关为特定 Hadoop 发行版构建的详细指南,包括 为特定的 Hive 和 Hive Thriftserver 发行版构建。

    【讨论】:

      猜你喜欢
      • 2017-08-27
      • 1970-01-01
      • 2019-01-30
      • 2016-08-30
      • 1970-01-01
      • 2014-02-21
      • 2014-01-31
      • 2013-02-03
      • 1970-01-01
      相关资源
      最近更新 更多