1. 首页
  2. 综合百科
  3. spark是什么意思(阿帕奇)

spark是什么意思(阿帕奇)

简介:关于spark是什么意思(阿帕奇)的相关疑问,相信很多朋友对此并不是非常清楚,为了帮助大家了解相关知识要点,小编为大家整理出如下讲解内容,希望下面的内容对大家有帮助!
如果有更好的建议或者想看更多关于综合百科技术大全及相关资讯,可以多多关注茶馆百科网。

ApacheFlink是新一代通用大数据处理引擎,旨在统一不同的数据负载。听起来像ApacheSpark吗?是的,Flink正在尝试解决Spark正在尝试解决的问题。这两个系统都旨在建立一个单一的平台,可以运行批处理、流媒体、交互、图形处理、机器学习等。所以Flink和Spark的思想中介没有太大区别。但是它们在实现细节上确实有很大的不同。

我们来比较一下Spark和Flink的区别。一些方法在两个框架中是相同的,而另一些则完全不同。

图片来自黄浴中的知乎。

1.抽象

在Spark中,对于批处理,使用RDD抽象和DStream进行流传输,这是内部RDD本身。因此,Spark下表示的所有数据都由RDD抽象来表示。

在Flink中,为批量数据集提供数据集抽象,为流应用提供数据流。他们听起来很像RDD和数据流,但他们不是。

差异是以下几点:

数据集在运行时只是计划

在Spark中,RDD在运行时被表示为一个java对象。随着project钨的推出,有了一点改变。但是在ApacheFlink中,数据集被表示为一个逻辑计划。这听起来熟悉吗?是的,它们就像Spark中的Dataframe。所以你可以像优化器优化的一等公民一样,在Flink中得到api这样的数据帧。但是SparkRDD之间没有优化。

Flink的数据集和Spark的DataframeAPI一样,在执行前都进行了优化。

在spark1.6中,数据集API被添加到spark中,这可能最终会取代RDD抽象。

Dataset和DataStream是独立的API

在Spark中,所有不同的抽象,比如DStream和Dataframe,都是基于RDD抽象的。但在Flink中,数据集和数据流是基于顶层通用引擎的两个独立的抽象。虽然它们模仿相似的API,但在DStream和RDD的情况下,它们不能组合在一起。尽管在这方面做了一些努力,但最终结果还不够清楚。

不能组合数据集和数据流,如RDD和数据流。

因此,虽然Flink和Spark的抽象相似,但实现方式不同。

2.内存管理

直到Spark1.5,Spark都是用Java堆来缓存数据。尽管该项目开始时比较容易,但它会导致内存不足(OOM)问题和垃圾收集(gc)暂停。所以从1.5开始,Spark进入了名为project钨的自定义内存管理。

Flink从第一天开始就定制内存管理。其实这也是Spark向这个方向发展的灵感之一。Flink不仅以自定义的二进制布局存储数据,还直接对二进制数据进行操作。在Spark中,所有的数据框操作都直接运行在Spark1.5中project钨的二进制数据上。

在JVM上执行定制内存管理可以提高性能和资源利用率。

3.实施语言

Spark在Scala中实现。它提供了其他语言的API,比如Java、Python和r。

Flink是用Java实现的。它确实提供了ScalaAPI。

所以相对于Flink,Spark中的选择语言更好。在Flink的一些scalaAPI中,java抽象也是API。这将会有所改善,因为scalaAPI获得了更多的用户。

4.API

Spark和Flink都模仿scala集合API。所以表面上看,两者的API很像。

5.流

Apache park将流式处理视为快速批处理。ApacheFlink将批处理视为流处理的特例。这两种方法都有迷人的含义。

两种不同方法的区别或意义:

实时与近实时

ApacheFlink提供事件级处理,也称为实时流。它与风暴模型非常相似。

Spark只有一个小批量,不提供事件级粒度。这种方法被称为近实时。

Spark流是一种更快的批处理,而Flink批处理是一种有限的流处理。

虽然大多数应用程序可以接近实时使用,但很少有应用程序需要事件级实时处理。这些应用通常是风暴流而不是火花流。对于他们来说,Flink会是一个非常有趣的选择。

能够将历史数据/流相结合

将流处理作为更快的批处理运行的优势之一是,我们可以在两种情况下使用相同的抽象。Spark非常支持将批处理和流数据结合起来,因为它们都使用RDD抽象。

在Flink的情况下,批处理和流不共享相同的

API抽象。因此,尽管有一些方法可以将基于历史文件的数据与流相结合,但它并不像Spark那样干净。

在许多应用中,这种能力非常重要。在这些应用程序中,Spark代替Flink流式传输。

灵活的窗口

由于最小批处理的性质,Spark现在对窗口的支持非常有限。允许根据处理时间窗口批量处理。

与其他任何系统相比,Flink提供了非常灵活的窗口系统。Window是Flink流API的主要焦点之一。它允许基于处理时间、数据时间和无记录等的窗口。这种灵活性使Flink流API与Spark相比非常强大。


6.SQL界面

截至目前,最活跃的Spark库之一是spark-sql。Spark提供了像Hive一样的查询语言和像DSL这样的Dataframe来查询结构化数据。它是成熟的API并且在批处理中广泛使用并且很快将在流媒体世界中使用。

截至目前,FlinkTableAPI仅支持DSL等数据帧,并且仍处于测试阶段。有计划添加sql接口,但不确定何时会落在框架中。

目前为止,Spark与Flink相比有着不错的SQL故事。

7.数据源集成

Spark数据源API是框架中最好的API之一。数据源API使得所有智能资源如NoSQL数据库,镶木地板,优化行列(OptimizedRowColumnar,ORC)成为Spark上的头等公民。此API还提供了在源级执行谓词下推(predicatepushdown)等高级操作的功能。

Flink仍然在很大程度上依赖于map/reduceInputFormat来进行数据源集成。虽然它是足够好的提取数据API,但它不能巧妙地利用源能力。因此Flink目前落后于目前的数据源集成技术。


8.迭代处理

Spark最受关注的功能之一就是能够有效地进行机器学习。在内存缓存和其他实现细节中,它是实现机器学习算法的真正强大的平台。

虽然ML算法是循环数据流,但它表示为Spark内部的直接非循环图。通常,没有分布式处理系统鼓励循环数据流,因为它们变得难以理解。

但是Flink对其他人采取了一些不同的方法。它们在运行时支持受控循环依赖图(cyclicdependencegraph)。这使得它们与DAG表示相比以非常有效的方式表示ML算法。因此,Flink支持本机平台中的迭代,与DAG方法相比,可实现卓越的可扩展性和性能。

9.流作为平台与批处理作为平台

ApacheSpark来自Map/Reduce时代,它将整个计算表示为数据作为文件集合的移动。这些文件可能作为磁盘上的阵列或物理文件驻留在内存中。这具有非常好的属性,如容错等。

但是Flink是一种新型系统,它将整个计算表示为流处理,其中数据有争议地移动而没有任何障碍。这个想法与像akka-streams这样的新的反应流系统非常相似。

10.成熟

Flink像批处理这样的部分已经投入生产,但其他部分如流媒体,TableAPI仍在不断发展。这并不是说在生产中就没人使用Flink流。

图片源自黄浴的知乎

总结

与Flink相比,Spark是一个非常成熟和完整的框架,但Flink确实带来了非常有趣的想法,如自定义内存管理,数据集API等。Spark社区正在认识它并将这些想法融入到Spark中。所以从这个意义上来说,Flink正在将大数据处理完全提升到下一个层次。

本文主要介绍了关于spark是什么意思(阿帕奇)的相关养殖或种植技术,综合百科栏目还介绍了该行业生产经营方式及经营管理,关注综合百科发展动向,注重系统性、科学性、实用性和先进性,内容全面新颖、重点突出、通俗易懂,全面给您讲解综合百科技术怎么管理的要点,是您综合百科致富的点金石。
以上文章来自互联网,不代表本人立场,如需删除,请注明该网址:http://23.234.50.4:8411/article/104571.html