Apache Storm与Spark比较:它们有哪些区别?

2021年11月20日02:50:19 发表评论 1,001 次浏览

介绍

Apache Storm与Spark有什么不同?Apache Storm 和 Spark 是用于处理实时数据流的大数据处理平台。这两种技术的核心区别在于它们处理数据的方式。Storm 并行化任务计算,而 Spark 并行化数据计算。但是,API 之间还存在其他基本差异。

Apache Storm与Spark哪个更好?本文提供了 Apache Storm 与 Spark Streaming 的深入比较。

Storm 与 Spark:定义

Apache Storm是一个实时流处理框架。所述三叉戟抽象层提供与Storm备选接口,添加实时分析操作。

另一方面,Apache Spark是用于大规模数据的通用分析框架。在星火流API可用于在接近实时的数据流,旁边的框架内与其他分析工具。

Apache Storm与Spark有哪些区别

Storm 和 Spark 都是具有类似意图的免费使用和开源 Apache 项目。下表概述了两种技术之间的主要区别:

StormSpark
编程语言多语言集成支持 Python、R、Java、Scala
加工模型通过 Trident 提供微批处理的流处理可通过 Streaming 使用微批处理进行批处理
原语元组流
元组批处理
分区
数据流
可靠性恰好一次(三叉戟)
至少一次
最多一次
正好一次
容错由主管进程自动重启Worker 通过资源管理器重启
状态管理通过三叉戟支持通过流媒体支持
便于使用更难操作和部署更易于管理和部署

Apache Storm与Spark有什么不同:编程语言

与其他编程语言集成的可用性是在 Storm 和 Spark 之间进行选择时的首要因素之一,也是这两种技术之间的主要区别之一。

Storm

Storm 具有多语言功能,几乎可用于任何编程语言。用于流式处理和处理的 Trident API 兼容:

  • Java
  • Clojure
  • Scala

Spark

Spark 为以下语言提供高级流 API:

  • Java
  • Scala
  • Python

某些高级功能(例如来自自定义源的流式传输)对 Python 不可用。但是,来自高级外部源(例如 Kafka 或 Kinesis)的流式传输适用于所有三种语言。

加工模型

Apache Storm与Spark有哪些区别?处理模型定义了如何实现数据流。信息以下列方式之一处理:

  • 一次记录一张。
  • 在离散批次中。

Storm

核心Storm的处理模型直接对元组流进行操作,一次一条记录,使其成为一种合适的实时流技术。Trident API 添加了使用微批次的选项。

Spark

Spark 处理模型将数据分成批次,在进一步处理之前对记录进行分组。Spark Streaming API 提供了将数据拆分为微批次的选项。

Apache Storm与Spark比较:它们有哪些区别?

原语

原语代表了两种技术的基本构建块以及对数据执行转换操作的方式。

Storm

Core Storm 操作元组流,而 Trident 操作元组批次分区。Trident API 以类似于Hadoop的高级抽象的类似方式处理集合。Storm的主要原语是:

  • Spouts 产生来自源的实时流。
  • Bolts 执行数据处理并保持持久性的。
Apache Storm与Spark比较:它们有哪些区别?

在 Trident 拓扑中,操作分组为Bolts 。分组依据、联接、聚合、运行函数和过滤器可用于隔离的批次和不同的集合。聚合持久存储在由HDFS支持的内存中或其他一些存储中,如Cassandra。

Spark

使用 Spark Streaming,连续的数据流分为离散流(DStreams),即一系列弹性分布式数据库(RDD)。

Spark 允许在原语上使用两种通用类型的运算符:

1.流转换运算符,其中一个 DStream 转换为另一个 DStream。

2.输出操作符帮助将信息写入外部系统。

注意:查看RDD API的Spark DataFrame扩展以提高效率。

可靠性

可靠性是指数据交付的保证。在处理数据流可靠性时,有三种可能的保证:

  • 至少一次。数据交付一次,也有可能多次交付。
  • 最多一次。数据只传递一次,任何重复都会丢弃。存在数据未到达的可能性。
  • 正好一次。数据一次交付,没有任何损失或重复。尽管很难实现,但保证选项最适合数据流。

Storm

Storm 在数据流可靠性方面非常灵活。在其核心,至少一次至多一次选项是可能的。与 Trident API 一起,所有三种配置都可用

Spark

Apache Storm与Spark有哪些区别?Spark 试图通过专注于一次性数据流配置来采取最佳路线。如果工人或驱动程序失败,则至少应用一次语义。

容错

容错定义了流技术在发生故障时的行为。Spark 和 Storm 都具有相似级别的容错能力。

Spark

在 worker 失败的情况下,Spark 通过资源管理器重新启动 worker,例如YARN。驱动程序故障使用数据检查点进行恢复。

Storm

如果 Storm 或 Trident 中的进程失败,则监督进程会自动处理重新启动。ZooKeeper在状态恢复和管理中起着至关重要的作用。

状态管理

Spark Streaming 和 Storm Trident 都内置了状态管理技术。状态跟踪有助于实现容错以及精确一次交付保证。

Apache Storm与Spark有什么不同:易于使用和开发

易于使用和开发取决于该技术的文档化程度以及操作流的容易程度。

Spark

Spark 更容易部署和开发这两种技术。Streaming 有很好的文档记录并部署在 Spark 集群上。流作业可与批处理作业互换。

注意:查看我们关于在 Bare Metal Cloud上自动部署 Spark Cluster 的四步教程。

Storm

Storm 的配置和开发有点棘手,因为它包含对 ZooKeeper 集群的依赖。使用 Storm 的优势在于多语言特性。

Apache Storm与Spark哪个更好?

Storm 和 Spark 之间的选择取决于项目以及可用的技术。主要因素之一是编程语言和数据交付可靠性的保证。

虽然两种数据流和处理之间存在差异,但最好的方法是测试这两种技术,看看哪种技术最适合你和手头的数据流。

结论

Apache Storm与Spark有哪些区别?带有 Trident API 的 Apache Storm 和 Spark Streaming API 是类似的技术。这篇文章提供了 Storm 与 Spark 的正面比较,因此你可以做出明智的决定。

此外,请考虑你希望如何存储流数据以及你将需要的服务器资源类型。在我们的文章中阅读有关 Cassandra 与 MongoDB 的比较,以了解哪种数据库适合你:Cassandra 与 MongoDB - 有何不同?

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: