Spark是一个极速的,多用途的计算系统。这是来自官方的自我引见。普通敢自称系统的都是有两把刷子的,况且还是多用途的计算系统。Spark计算系统蕴含如下配置组件
Spark Core: Spark的外围配置模块。
Spark SQL: 用于解决结构化数据。
MLlib:用于机器学习。
GraphX:用于图像解决。
Spark Streaming:用于解决实时数据流。
蕴含如此多的配置,自称多配置计算系统也是可以的。这篇文章帮大家梳理一下学习Spark Streaming环节中或许会让你发生困惑的基本概念。
Spark Core 是 Spark的外围模块,这个模块提供了一个外围概念叫做RDD(resilient distributeddataset)。你可以繁难的把它了解成一个数据片段汇合,你要解决的源数据文件可以合成成很多个RDD。Spark为RDD提供了两种类型的操作,一种是transformations,一种是action。
transformations:假设一个RDD经过某种操作之后,生成一个新的RDD,那么这个操作就是transaction的。比如,map,flatMap,filter等。action:对一个RDD启动计算操作,以生成某种结果,比如reduce,count等操作。
留意:一切的transformations都是Lazy的,也就是说只要碰到action操作的时刻才会口头前面的transformations操作。
Spark Streaming是用来解决流式数据的,假定咱们规则每隔一秒钟(经过duration设置)取一次性数据,那么这段期间内积赞的数据就称为一个batch,外面的数据就用DStream示意。从编写代码的角度来看,你可以把DStream和RDD等同看待,由于他们的算子操作都是一样的。然而他们的数据结构还是有着实质不同的,咱们可以把DStream繁难的了解成是RDD加上了期间戳。如下图
Spark 经常使用DAG 启动数据建模,DAG 被称为有向无环图,有向无环图的定义是这样的"在图论中,假设一个有向图从恣意顶点登程不可经过若干条边回到该点,则这个图是一个有向无环图(DAG,directed acyclicgraph)",咱们经过一个繁难的例子来感触一下,Spark是如何经常使用DAG建模的。
上方的代码可以成功一段文本内容的各个单词的数量统计。
上方这段代码可以用上方这个图示意
这就是一个繁难的DAG模型,数据依照方向流动,再也回不到原点。SparkStreaming将这个DAG模型,始终的运行到每一个Batch外面的数据中。大家可以把DAG模型了解成类,它是数据解决的模版,而每个Batch外面的数据就是不同的实例对象。
Spark运行程序启动之后,咱们会应用Spark提供的监控页面来检查程序的运转状况。在页面上会看到Job,Stage,Task等外容展现,假设不了解他们代表什么意思,那么Spark善意好意提供的监控页面对咱们来说就毫有意义。上方给大家繁难说一下这些概念究竟什么意思,以及他们之间的相关。
先来看个图
从图中可以看出,一个Application被合成成多个Job,每个Job又合成成多个Stage,Stage又会合成成多个Task,而Task是义务运转的最小单元,最终会被Executor口头。
Application:繁难的说就是咱们写的运行代码,启动起来之后就是一个Application。
Job:由Spark的action算子触发。也就是每遇到一个action算子就会触发一个Job义务,这个时刻就会口头前面的一系列transformations操作。
Stage:Job义务会继续合成成Stage,Stage是依据DAG的宽窄依赖来划分,也就是RDD之间的依赖相关。从后往前,每遇到一个宽依赖就划分为一个Stage。
宽依赖(Shuffle/WideDependency):父RDD的分区和子RDD的分区是一对多或许多对多的相关。比如groupByKey,reduceByKey,join等操作
窄依赖(NarrowDependency):父RDD的分区和子RDD的分区的相关是一对一或许多对一的相关,比如map,flatmap,filter等操作。
宽窄依赖的定义可以用如下图,笼统的展现。
拿文章扫尾的单词统计程序为例,Stage划分状况应该是这样的。
task:Stage蕴含很多Task,每个Task会口头Stage中蕴含的算子。
以上就是Spark精进之路上必定了解的基本概念,宿愿对各位有协助。
本网站的文章部分内容可能来源于网络和网友发布,仅供大家学习与参考,如有侵权,请联系站长进行删除处理,不代表本网站立场,转载联系作者并注明出处:https://duobeib.com/diannaowangluoweixiu/8305.html