一、目的
在本文中,我们将对 Apache Hadoop、Spark、 Flink三者之间的功能进行比较。它们都是大数据处理技术,以各种特色和优势迅速占领了IT大数据处理市场。本文您将了解Spark所针对的Hadoop的局限性以及由于 Spark的缺点而产生Flink数据处理引擎。因此,让我们开始Hadoop vs Spark vs Flink吧。
Hadoop vs Spark vs Flink –大数据框架比较
二、Apache Hadoop,Spark和Flink之间的比较
1. Hadoop vs Spark vs Flink –数据处理
- Hadoop: 专为批处理而构建的Apache Hadoop。它一次将大量数据集进行输入,进行处理并产生结果。批处理在处理大量数据时非常稳定。由于数据的大小和系统的计算能力有关,输出会产生延迟。
- Spark:Apache Spark也是Hadoop生态系统的一部分。 它也是一个批处理系统,但它也支持流处理。
- Flink:Apache Flink为流和批处理提供了一个运行时。
2. Hadoop vs Spark vs Flink –流引擎
- Hadoop: Map-reduce是面向批处理的处理工具。它一次将大量数据集输入到输入中,进行处理并产生结果。
- Spark: Apache Spark Streaming以微批处理数据流。每个批次包含在该批次期间到达的事件的集合。但是对于我们需要处理大量实时数据流并实时提供结果的业务而言,这还不够。
- Flink: Apache Flink是真正的流引擎。它使用流来处理工作负载:流,SQL,微批处理和批处理。批处理是流数据的有限集合。
3. Hadoop vs Spark vs Flink –数据流
- Hadoop: MapReduce计算数据流没有任何循环,这是一个阶段链。在每个阶段,都是使用上一阶段的输出作为本阶段的输入。
- Spark:尽管机器学习算法是循环数据流,但Spark将其表示为 (DAG) 直接非循环图 或 有向无环图。
- Flink: Flink采用与其他方法不同的方法。它在运行时受控循环依赖图。这有助于以非常有效的方式表示机器学习算法。
4. Hadoop vs Spark vs Flink –计算模型
- Hadoop: MapReduce采用了面向批处理的模型。批处理静态数据。它一次要处理大量数据,对其进行处理,然后将其输出。
- Spark: Spark采用了微批处理。微批处理本质上是一种“先收集再处理”的计算模型。
- Flink: Flink采用连续流式流传输模型,实时对数据进行处理,而不会在收集数据或处理数据时出现任何延迟。
5. Hadoop vs Spark vs Flink –性能
- Hadoop: Apache Hadoop仅支持批处理。它不处理流数据,因此与Hadoop,Spark和Flink相比,性能会降低。
- Spark:虽然Apache Spark具有出色的社区背景,现在也被认为是最成熟的社区。但是它的流处理效率不如Apache Flink,因为它使用微批处理。
- Flink: 与其他任何数据处理框架相比,Apache Flink的性能都非常出色。Apache Flink使用闭环迭代,当我们比较Hadoop,Spark和Flink时,它们可使机器学习和图形处理更快。
6. Hadoop vs Spark vs Flink –内存管理
- Hadoop: 它提供可配置的内存管理。您可以动态或静态地执行此操作。
- Spark: 它提供可配置的内存管理。从Spark 1.6开始已朝着自动进行内存管理的方向发展。
- Flink: 提供自动内存管理。它具有自己的内存管理系统,与Java的垃圾回收器分开。
7. Hadoop vs Spark vs Flink –容错
- Hadoop: MapReduce具有高度的容错能力。如果Hadoop发生任何故障,则无需从头开始重新启动应用程序。
- Spark: Apache Spark Streaming可进行故障恢复,并且无需任何额外的代码或配置。
- Flink: Apache Flink遵循的容错机制基于Chandy-Lamport分布式快照。该机制是轻量级的,这导致维持高吞吐率并同时提供强大的一致性保证。
8. Hadoop vs Spark vs Flink –可扩展性
- Hadoop: MapReduce具有不可思议的可扩展性潜力,已在成千上万的节点上用于生产。
- Spark: 它具有高度的可扩展性,我们可以在集群中继续添加n个节点。大型已知的Spark群集有8000个节点。
- Flink: Apache Flink也是高度可扩展的,我们可以在集群中继续添加n个节点。一个已知的大型Flink集群有数千个节点。
9. Hadoop vs Spark vs Flink –迭代处理
- Hadoop:它不支持迭代处理。
- Spark: 分批迭代其数据。在Spark中,每个迭代都是有计划的调度和执行。
- Flink: 使用其流体系结构迭代数据。可以控制Flink仅处理实际上已更改的数据部分,从而显着提高作业的性能。
10. Hadoop vs Spark vs Flink –语言支持
- Hadoop: 主要支持Java,其他支持的语言包括c,c ++,ruby,groovy,Perl,Python。
- Spark: 它支持Java, Scala, Python and R 。Spark由Scala语言编写。它提供其他语言(如Java, Scala, Python and R)的API。
- Flink:它支持 Java, Scala, Python and R。Flink用Java实现。它也提供Scala API。
11. Hadoop vs Spark vs Flink –优化
- Hadoop:在MapReduce中,必须手动优化作业。有几种方法可以优化MapReduce作业:正确配置集群,使用组合器,使用LZO压缩,适当地调整MapReduce Task的数量以及为数据使用最合适和最紧凑的可写类型。
- Spark:在Apache Spark中,必须手动优化作业。有一个新的可扩展优化器Catalyst,它基于Scala中的函数编程构造。Catalyst的可扩展设计具有两个目的:首先,易于添加新的优化技术。第二,使外部开发人员可以扩展优化器。
- Flink: Apache Flink带有一个独立于实际编程接口的优化程序。Flink优化器的工作方式类似于关系数据库优化器,但是将这些优化应用于Flink程序,而不是SQL查询。
12. Hadoop vs Spark vs Flink –延迟
- Hadoop:Hadoop的MapReduce框架相对较慢,因为它旨在支持不同的格式,结构和大量数据。这就是为什么Hadoop具有比Spark和Flink更高的延迟的原因。
- Spark: Apache Spark是又一个批处理系统,但是它比Hadoop MapReduce相对更快,因为它通过RDD将许多输入数据缓存在内存中,并将中间数据保留在内存本身中,最终在完成时或需要时将数据写入磁盘。
- Flink: Apache Flink的配置工作量很小,其数据流运行时可实现低延迟和高吞吐量。
13. Hadoop vs Spark vs Flink –处理速度
- Hadoop: MapReduce的处理速度比Spark和Flink慢。仅由于基于MapReduce的执行的性质而导致出现速度慢,在这种情况下,它会生成大量中间数据,在节点之间交换的数据很多,从而导致巨大的磁盘IO延迟。此外,它必须将大量数据保留在磁盘中以在阶段之间进行同步,以便它可以支持从故障中恢复作业。而且,MapReduce中没有办法将所有数据子集缓存在内存中。
- Spark: Apache Spark的处理速度比MapReduce快,因为它通过RDD将许多输入数据缓存在内存中,并将中间数据保留在内存本身中,已经为大家精心准备了大数据的系统学习资料,从Linux-Hadoop-spark-......,需要的小伙伴可以点击最终在完成时或需要时将数据写入磁盘。Spark比MapReduce快100倍,这表明Spark比Hadoop MapReduce更好。
- Flink: 由于其流架构,它的处理速度比Spark快。Flink通过仅处理实际上已更改的部分数据来提高作业的性能。
14. Hadoop vs Spark vs Flink –可视化
- Hadoop: 在Hadoop中,数据可视化工具是zoomdata,它可以直接连接到HDFS,也可以使用基于SQL-on-Hadoop的技术(例如Impala,Hive,Spark SQL,Presto等)直接连接到HDFS。
- Spark: 它提供用于提交和执行作业的Web界面,在该界面上可以看到生成的执行计划。Flink和Spark都已集成到Apache zeppelin中。它提供数据分析,提取以及发现,可视化和协作。
- Flink: 它还提供用于提交和执行作业的Web界面。生成的执行计划可以在此界面上显示。
15. Hadoop vs Spark vs Flink –恢复
- Hadoop: MapReduce自然可以对系统故障或故障进行恢复。这是高度容错的系统。
- Spark: Apache Spark RDD允许通过重新计算DAG来恢复故障节点上的分区,同时还通过检查点支持与Hadoop更相似的恢复方式,以减少RDD的依赖性。
- Flink: 它支持检查点机制,该机制将程序存储在数据源和数据接收器中,窗口状态以及用户定义的状态,该状态可在失败后恢复流作业。
16. Hadoop vs Spark vs Flink –安全性
- Hadoop: 它支持Kerberos身份验证,这很难管理。但是,第三方供应商已使组织能够利用Active Directory Kerberos和LDAP进行身份验证。
- Spark: Apache Spark的安全性很少,因为它目前仅支持通过共享机密(密码认证)进行认证。Spark可以享受的安全性优势在于,如果您在HDFS上运行Spark,它可以使用HDFS ACL和文件级权限。此外,Spark可以在YARN 上运行以使用Kerberos身份验证。
- Flink: Flink通过Hadoop / Kerberos基础结构提供了用户身份验证支持。如果您在YARN上运行Flink,Flink会获取提交程序的用户的Kerberos令牌,并使用YARN,HDFS和HBase对其进行身份验证.Flink即将推出的连接器,流式程序可以通过SSL作为流代理进行身份验证。
17. Hadoop vs Spark vs Flink –成本
- Hadoop:由于 MapReduce不会尝试将所有内容存储在内存中,因此通常可以在比某些替代产品便宜的硬件上运行。
- Spark:由于spark需要大量RAM才能在内存中运行,因此增加了集群中的内存,逐渐增加了成本。
- Flink: Apache Flink还需要大量RAM才能在内存中运行,因此它将逐渐增加其成本。
18. Hadoop vs Spark vs Flink –兼容性
- Hadoop: Apache Hadoop MapReduce和Apache Spark彼此兼容,并且Spark通过JDBC和ODBC共享MapReduce在数据源,文件格式和商业智能工具方面的所有兼容性。
- Spark: Apache Spark和Hadoop相互兼容。Spark与Hadoop数据兼容。它可以通过YARN或Spark的独立模式在Hadoop群集中运行,并且可以处理HDFS,HBase,Cassandra,Hive和任何Hadoop InputFormat中的数据。
- Flink: Apache Flink是可扩展的数据分析框架,与Hadoop完全兼容。它提供了Hadoop兼容性软件包,以包装针对Hadoop的MapReduce接口实现的功能并将其嵌入Flink程序中。
19. Hadoop vs Spark vs Flink –抽象
- Hadoop:在MapReduce中,我们没有任何类型的抽象。
- Spark:在Spark中,对于批处理,我们具有Spark RDD抽象和用于流传输的DStream,DStream在内部是RDD本身。
- Flink:在Flink中,我们具有批处理的数据集抽象和流应用程序的DataStreams。
20. Hadoop vs Spark vs Flink –易于使用
- Hadoop: MapReduce开发人员需要手动编写每个操作的代码,这使工作变得非常困难。
- Spark: 因为它有大量的高级操作函数,所以编程很容易。
- Flink: 它也有高级操作函数。
21. Hadoop vs Spark vs Flink –交互模式
- Hadoop: MapReduce没有交互模式。
- Spark: Apache Spark具有一个交互式shell程序,以学习如何充分利用Apache Spark。这是一个用Scala编写的Spark应用程序,可提供具有自动完成功能的命令行环境,您可以在其中运行临时查询并熟悉Spark的功能。
- Flink: 它带有集成的交互式Scala Shell。它既可以用于本地设置,也可以用于群集设置。
22. Hadoop vs Spark vs Flink –实时分析
- Hadoop: MapReduce不能进行实时数据处理,因为它旨在对大量数据执行离线批处理。
- Spark:它可以处理实时数据,即以每秒数百万个事件的速率来自实时事件流的数据。
- Flink:尽管它还提供快速的批处理数据处理,但它主要用于实时数据分析。
23 。Hadoop vs Spark vs Flink –程序调度
- Hadoop:Hadoop中的 Scheduler成为可插入组件。有两个用于多用户工作负载的调度程序:公平调度程序和容量调度程序。要调度复杂的流程,MapReduce需要一个外部作业调度程序,例如Oozie。
- Spark:由于内存中的计算,Spark充当其自己的流调度程序。
- Flink: Flink可以使用YARN Scheduler,但是Flink也有自己的Scheduler。
24 。Hadoop vs Spark vs Flink – SQL支持
- Hadoop:它使用户可以使用Apache Hive运行SQL查询。
- Spark:它使用户能够使用Spark-SQL运行SQL查询。Spark提供了像查询语言一样的Hives和像DSL 这样的Dataframe来查询结构化数据。
- Flink:在Flink中,Table API是一种类似于SQL的表达语言,支持诸如DSL之类的数据,并且仍处于测试阶段。有计划添加SQL接口,但不确定何时将其放入框架中。
25 。Hadoop vs Spark vs Flink –缓存
- Hadoop: MapReduce无法将数据缓存在内存中以满足将来的需求
- Spark: 它可以将数据缓存在内存中以进行进一步的迭代,从而增强其性能。
- Flink: 它可以将数据缓存在内存中以进行进一步的迭代,以增强其性能。
26 。Hadoop vs Spark vs Flink –硬件要求
- Hadoop: MapReduce在廉价硬件上运行得很好。
- Spark: Apache Spark需要中高级硬件。由于Spark在数据中缓存数据以进行进一步的迭代,从而增强了其性能。
- Flink: Apache Flink还需要中高级硬件。Flink还可以将数据缓存在内存中以进行进一步的迭代,从而增强其性能。
27. Hadoop vs Spark vs Flink –机器学习
- Hadoop: 它需要机器学习工具,例如Apache Mahout。
- Spark: 它有自己的一套机器学习MLlib。在内存缓存和其他实现细节中,它是实现ML算法的强大平台。
- Flink: 它具有FlinkML,它是Flink的机器学习库。它在运行时支持受控循环依赖图。与DAG表示相比,这使它们以非常有效的方式表示ML算法。
28. Hadoop vs Spark vs Flink –代码行
- Hadoop: Hadoop 2.0具有1,20,000行代码。更多的行数不会产生更多的错误,执行该程序将花费大量时间。
- Spark: Apache Spark仅用20000行代码开发。代码行数少于Hadoop。因此,执行程序所需的时间更少。
- Flink: Flink使用Scala和Java中开发的,代码行的数量少于Hadoop。因此,执行程序所需的时间也更少。
29. Hadoop vs Spark vs Flink –高可用性
高可用性是指可以长时间运行的系统或组件。
- Hadoop:可在高可用性模式下配置。
- Spark:可在高可用性模式下配置。
- Flink:可在高可用性模式下配置。
30. Hadoop vs Spark vs Flink – Amazon S3连接器
Amazon Simple Storage Service(Amazon S3)是具有简单Web服务界面的对象存储,可以从Web上的任何位置存储和检索任何数量的数据。
- Hadoop:提供对Amazon S3 Connector的支持。
- Spark:提供对Amazon S3连接器的支持。
- Flink:提供对Amazon S3连接器的支持。
31. Hadoop vs Spark vs Flink –部署
- Hadoop:在独立模式下,Hadoop配置为以单节点,非分布式模式运行。在伪分布式模式下,Hadoop以伪分布式模式运行。因此,区别在于每个Hadoop守护程序都以伪分布式模式在单独的Java进程中运行。而在本地模式下,每个Hadoop守护程序都作为单个Java进程运行。在完全分布式模式下,所有守护程序都在形成多节点群集的单独节点中执行。
- Spark:它还提供了一种简单的独立部署模式,可在Mesos或YARN集群管理器上运行。它可以通过手动启动母版和工人来手动启动,也可以使用我们提供的启动脚本启动。也可以在一台机器上运行这些守护程序进行测试。
- Flink:它还提供独立部署模式以在YARN群集管理器上运行。
32. Hadoop vs Spark vs Flink –反压处理
BackPressure是指当缓冲区已满且无法接收更多数据时,在I / O交换机上建立数据。在消除数据瓶颈或缓冲区为空之前,不再传输任何数据包。
- Hadoop: 通过手动配置处理BackPressure。
- Spark: 它还通过手动配置处理BackPressure。
- Flink: 它通过系统架构隐式处理BackPressure。
33. Hadoop vs Spark vs Flink –消除重复
- Hadoop:Hadoop中没有消除重复的功能。
- Spark: Spark还可以一次准确地处理每条记录,从而消除了重复。
- Flink: Apache Flink仅一次处理每条记录,因此消除了重复。流应用程序可以在计算过程中保持自定义状态。Flink的检查点机制可确保在出现故障时状态只有一次。
34. Hadoop,Spark,Flink – Windows窗口标准
数据流需要分组为多个逻辑流,每个逻辑流都可以应用窗口运算符。
- Hadoop: 它不支持流传输,因此不需要窗口条件。
- Spark: 它具有基于时间的窗口条件。
- Flink:它具有基于记录或任何自定义的用户定义的Flink窗口条件。
35. Hadoop vs Spark vs Flink – Apache许可证
Apache许可证2.0版(ALv2)是由Apache软件基金会(ASF)编写的许可的免费软件许可证。Apache许可证要求保留版权声明和免责声明。
- Hadoop: Apache许可证2。
- Spark: Apache许可2。
- Flink: Apache许可证2。