Hadoop 和 Spark 之间的主要区别是什么?

数据挖掘 大数据 阿帕奇火花 apache-hadoop
2021-09-16 14:01:20

我最近阅读了有关 Hadoop 与 Spark 的以下内容:

坚持内存列式数据查询。这是让 Apache Spark 在几秒钟内运行 Hadoop 需要数小时或数天的查询的杀手级功能。内存比磁盘访问快得多,任何现代数据平台都应该优化以利用这种速度。此外,列式数据存储大大减少了用于空数据或冗余数据的内存量。

有人可以解释一下:1)Apache Hadoop 和 Spark 是什么,2)它们有何不同,以及 3)这与内存与磁盘访问有何关系。

1个回答

Hadoop 是一个用于在 Hadoop 文件系统 (HDFS) 上分布式存储和处理大数据的框架,其中数据存储在“节点”集群中,并且可以设置为容错。由于数据跨多个节点存储,因此可以并行处理,Hadoop 使用 MapReduce 算法来执行此操作。这基本上是通过集群中的每个节点从磁盘获取它需要的数据来实现的,执行必要的计算,然后将这些计算聚合并返回。

Spark 是大数据的分布式处理框架,但不提供存储。因此,它需要在分布式存储之上工作,这可能是 Hadoop。Spark 被设计为内存引擎,因此比 Hadoop 上的 MapReduce 快得多。它也是容错的。Spark 包含一个 SQL 版本,与 Hadoop/MapReduce 相比,它允许更好地查询底层数据。由于在实践中,当底层数据过大时,Spark 仍然经常受到内存可用性的限制,因此仍然存在一些磁盘绑定操作,但至少在理论上它能够 100% 进行内存实时分析。这在 Hadoop 中是不可能的。

Hadoop和Spark都可以处理列式数据,虽然Spark默认是列式的,而在Hadoop中,底层数据往往是面向行的,比如csv文件(但可以支持parquet和ORC等列式数据)。以列格式存储的数据查询起来要快得多。

Hadoop 专为大规模批处理而设计。Spark 也是为批处理而设计的,但也可以处理流和其他数据流。两者都是可扩展技术,但 Hadoop 几乎是线性扩展的,而使用 Spark,虽然对于类似大小的数据,它通常比 Hadoop 更快,但基于集群中可用内存的限制,在此之上性能会比使用 Hadoop 更快地恶化. 也就是说,随着数据大小的增加,Hadoop 的速度将近似线性下降。使用 Spark,一旦超过集群中的内存,相对性能下降的速度会比使用 Hadoop 快。

由于 Spark 集群需要内存,因此在正常运行时间方面,它的运行成本通常比 Hadoop 高。然而,对于较小的数据集,更快的内存处理可能会完全抵消更高的计算时间成本。

以上一些是故意的一般陈述,可能存在边缘情况和其他不适用的情况。