运行实时的“ BI”,Storm和Spark如何选择

x33g5p2x  于2020-12-20 发布在 Spark  
字(3.0k)|赞(0)|评价(0)|浏览(843)

由于开源项目Storm和Spark,实时BI已成为一种主流技术。这是在这两者之间进行选择的方法。

实时商业智能(BI)的概念已经存在了很长时间(根据Wikipedia,它始于2006年)。人们谈论这个概念已经有几年了,但是实际上很少有人拥护这个愿景,而且很少人意识到BI的价值。

原因之一是缺乏支持BI和分析的实时实施的工具。现有的数据仓库环境偏向于具有非常高的延迟和成本的批处理操作。

但是,这种变化始于许多强大,易于使用的开源平台的出现。Apache Storm和Apache Spark是最著名的两个平台,它们为广泛的潜在用户提供实时处理功能。

两者都是Apache Software Foundation的项目,尽管功能有所重叠,但它们也具有独特的功能和作用。

Storm,实时处理Storm

是用于Hadoop事件流处理(处理)的去中心化计算框架,是Twitter公司于2011年收购的市场情报公司BackType首次发起的项目。

不久之后,Twitter开源了该项目并将其放到GitHub上。但是,Storm最终搬到了Apache Incubator,并在2014年9月成为Apache的首要项目。

Storm有时称为实时处理Hadoop。Storm文件还暗示同意。

“ Storm可以像Hadoop批处理一样轻松便捷地实时处理无限数据流。”

为此,Storm支持强大的可伸缩性,容错能力(快速故障,自动重启),并保证处理所有元组。

默认情况下,Storm保证消息“至少一次”。然而,同时,它提供了仅“精确地处理一次”的功能。

Storm使用Clojure作为其主要语言,但它被设计为在称为DAG(可调整的非循环图)的拓扑中支持Spouts(一种输入流)和Bolts(一种处理和输出模块)。

风暴拓扑在集群上运行,风暴调度程序根据拓扑配置将任务分配给集群周围的节点。

您可以认为此拓扑类似于Hadoop中的MapReduce作业,不同之处在于Storm专注于基于流的实时处理,并且该拓扑默认情况下会运行,直到永久或手动停止为止。 。

当拓扑开始时,喷口将数据拉入系统,然后将数据推入发生主要计算任务的保管库(然后我们可以将数据传递到下一个保管库)。

随着处理的进行,一个或多个保管库将数据写入数据库或文件系统,将消息发送至其他外部系统,或以其他方式向用户提供计算结果。

Storm生态系统的优势之一在于它具有丰富的喷嘴,可以从任何类型的源接收数据。您可能需要为特定应用程序开发自定义喷嘴,但是很有可能会从各种来源中找到现有的喷嘴,包括Twitter流API,Apache Kafka和JMS代理。

还有一些适配器可以轻松将其集成到HDFS文件系统中。这意味着Storm和Hadoop可以根据需要轻松兼容。另一个优点是它支持多种语言的编程。

Storm本身基于Clojure,但在JVM上运行,并且Vault几乎可以用任何语言开发。这包括JVM以外的其他语言,这些语言可以利用基于标准输入/输出流(stdin / stdout)的Jason使用元素间通信协议的优势。

总而言之,Storm是一个用于分布式计算的开源系统,它具有很好的可伸缩性,快速性和容错性,专注于流处理。

Storm在实时滚动矩阵计算,增量计算和数据流事件处理方面表现出色。Storm提供了实现全面的分布式RPC的基本元素,并且理论上可以用于几乎所有分布式计算任务,但是它的最大优势是事件流处理。

Spark,适用于所有内容的分布式处理

Spark是另一个实时分布式计算项目。它始于UC Berkeley旗下的AMPLab,后来加入Apache Incubator,并于2014年2月成为顶级项目。

与Storm一样,Spark支持面向流的处理。但是,它比Storm更像是一个通用的分布式计算平台。

Spark可以替代Hadoop中的MapReduce功能。Spark可以在现有的Hadoop集群上运行,并且YARN用于资源调度。除了Hadoop和YARN,Spark可以放在Mesos之上的层次结构中进行调度,也可以使用内置调度程序作为独立集群运行。

但是,有一点需要注意。如果未与Hadoop一起使用,则必须使用网络/分布式文件系统(NFS,AFS等)在集群中运行它。只有这样,每个节点才能访问基础数据。

Spark用Scala编写,但是像Storm一样,它支持多语言编程。但是,它仅支持Scala,Java和Python API。

Spark中没有喷口。但是,它包含可以处理存储在多个不同源中的数据的适配器,包括HDFS文件,Cassandra,HBase和S3。

Spark的优势在于其多处理范例支持和支持库。Spark支持流模型。但是,只有几个模块(例如SQL访问,图形操作,机器学习和流处理模块)之一支持此功能。

Spark还提供了一个非常简单的交互式外壳,该外壳支持实时初步数据分析以及使用Scala或Python API的快速原型开发。

处理交互式外壳揭示了Spark和Storm之间的另一个重要区别。Spark更具功能性。API操作正在改变调用原始操作的连续方法。

相反,Storm模型倾向于创建类并实现接口。没有更好的办法。您喜欢的方式将影响您决定哪个系统最能满足您的需求。

像Storm一样,Spark具有高度的可扩展性。根据Spark团队记录的文档,用户可以运行具有数千个节点的生产集群。Spark最近赢得了2014年Daytona GraySort比赛的冠军。从这里开始,我处理了100 TB数据的工作负载。根据Spark团队的说法,可以为ETL操作处理PB级的生产工作负载。

Spark是一个快速,高度可扩展,有弹性的开源分布式计算平台,与Hadoop和Mesos兼容,并支持多种计算模型,包括流,图驱动计算,SQL访问和分布式机器学习。

与Storm一样,Spark是实时分析和BI系统的出色平台,被证明具有高度可扩展性。

选择

Storm and Spark,该选择什么?流处理和CEP(复杂事件处理)样式处理是主要重点,如果您要使用专用集群进行创意项目,建议使用Storm。

如果现有的满足集成要求的Storm喷口可用,则尤其如此。这并不意味着是。但是,如果存在这些因素,我建议从Storm开始。

相反,如果您使用的是现有的Hadoop或Mesos群集,或者您的处理过程中有大量的图形处理,SQL访问和批处理过程,则建议您先查看Spark。

要考虑的另一个因素是两个系统的多语言支持。例如,如果您使用的是用R编写的代码或Spark本身不支持的语言,则Storm更具优势。如果需要实现使用API​​请求分析数据的交互式外壳,Spark会更好。这是因为它提供了Storm不支持​​的功能。

总之,在做出最终决定之前,详细分析两个平台是一个好主意。建议通过小型POC(概念验证)使用这两个平台。然后,对工作负载进行基准测试,使其接近预期的工作负载并做出最终决定。

当然,没有法律要求您仅选择两者之一。根据您的工作量,基础架构和要求,将Storm和Spark与Kafka,Hadoop和Plume并行使用可能是最好的解决方案。这也是开源的优势。

无论哪种方式,这些工具都表明实时BI环境已经改变。只有少数精英可以使用的强大功能扩展到了大多数。这些至少是中型和大型公司可用的选项。希望您能充分利用两者。

相关文章

微信公众号

最新文章

更多