spark运行原理简单介绍和一些总结

spark运行原理简单介绍和一些总结spark运行原理简单介绍和一些总结

大家好,又见面了,我是你们的朋友全栈君。

1·,运行原理

看个流程图:

spark运行原理简单介绍和一些总结

解说就是:

1,构建spark Application运行环境

2,sparkcontext向资源管理器注册

3,sparkContext向资源管理器申请运行Executor(执行器)

4,资源管理器分配executor

5,资源管理器启动executor

6,executor发送心跳至资源管理器

7,sparkContext构建DAG图

8,将DAG图分解成stage(taskSet)

9,把stage(taskSet)发送给TaskScheduler

10,Executor向sparkContext申请task

11,taskScheduler将task发送给Executor运行

12,同时,sparkContext 将应用程序代码发送给Executor

13,task在executor上运行,运行完毕释放所有资源。

 

二,

spark运行原理简单介绍和一些总结

在上图中,发生箭头交叉就形成一个stage,其中与伴随这shuffle操作,并且这些算子(groupby,join)都是Action中的算子,map,union则属于Transformation中的算子。

理解算子的含义:

  1. hadoop只有map、Reduce这两个算子
  2. Spark提供了很多算子:

 

spark运行原理简单介绍和一些总结

 

 

 

 

 

 

 

如上图,一个Job被拆分成若干个stage,每个stage执行一些计算,产生一些中间结果,他们的目的是最终生成这个JOB的计算结果,每个stage是一个taskset,包含若干个task。Task是spark最小的工作单元。在一个executor(执行器)上完成一个特定的事情。

 

三、窄依赖与宽依赖的判断方式,这里提供三种:

  1. 窄依赖:一个父RDD的一个partition最多被一个子RDD的一个partition使用。
  2. 宽依赖:一个父RDD的一个partition被多个子RDD的partition使用。
  3. 是否会发生shuffle操作,宽依赖会发生shuffle操作。也就是总结1,2,一个partition结果只被一个子paritition使用也就相当于没有发生shuffle操作。
  4. 也可以看有没有发生combine操作,不同的parititons被多个子RDD使用,必然发生合并操作。

 

四、理解下RDD是什么:全名“弹性分布式数据集”

  1. 可类比理解就是,hdfs上文件分片后的状态,比如使用splitline(),按行分割,则一行就是一个RDD。
  2. RDD是不可改变的分布式集合对象,因为它是加载的文件,明显我们不能对hdfs上的文件做增删改。
  3. 如 val lines=sc.textFile(“/home/aa.txt”);

     这里lines即RDDs;

     如果aa.txt很大,那么按照hdfs的文件写入,我们知道aa.txt是被按照64m放到不同的datanode节点上,在执行算子时在各个节点上分别处理各自的数据,可是我们操作的的对象都是lines这个变量,因此lines也即是这些节点数据的集合,即RDDS.

4,RDDs创建的二种方式:1,val rdds=sc.textFile();2,并行化处理,创建一个类似Array的容器,val Rdds=sc.parallelize(Array(1,2,3,4),4) (注,第二个参数4是parititons的个数

5,RDD.persist():持久化

     默认每次在RDDs上进行action操作,spark都重新计算RDDs,如果想重复利用一个RDDs,可以使用RDD.persisit()。例如:对于同一个lines,我要进行一系列的转换,然后用count计算,如果我还想接着计算reduce,那么持久化就会利用前面的count的缓存数据计算reduce.最后,可以使用unpersist()方法从缓存中移除。

6,RDDs的血统关系图:spark维护者RDDS之间的依赖关系的创建关系,叫做血统关系图。Spark使用血统关系图来计算每个RDD的需求和恢复丢失的数据。

spark运行原理简单介绍和一些总结

 

上面就是一个简单的血统图,优势:知道数据的操作记录,如果其中某一步骤的RDD丢失了,那么可根据血统关系图知道数据是怎么来的,可正向可反向,进而可恢复数据。

7,延迟计算(lazy Evaluation):spark对RDDs的计算,是他们第一次使用action操作时,通俗说就是只有在数据被必要使用是才去加载,同java的懒加载,比如我们使用transformation对数据转换,但是如果到最后我们并没有使用转换后的数据区计算结果呢?这样岂不是白白耗费资源了吗?这在大数据中是十分显著的,那么怎么知道在使用时,再去执行呢?Spark内部有metadata表会记录转换的操作记录。

 

五、RDD操作函数分Transformation和Action两类:

(1)Transformation是转换的意思,顾名思义就是把数据从一种形式转变成另一种形式,可以理解成转成方便我们看,好比把一长串的字符串,转成json树状图。

(2)Action是执行的意思,spark提供了很多算子,伴随DAG图。

(3)两个可以理解成对应hadoop中的map和reduce操作。

(4)没有action操作,单单转换是没有意义的。

 

六、Spark并行化就是执行了parallize()方法,如:sc.parallize(arrry)

 

七、sparkContext是一个对象,代表和一个集群的链接。

Sc.textFile()即是加载对象。

 

八、再理解下shuffle过程:把不同partition下相同的key聚集到一个partition下,造成了数据在内存中的重新分布。这也就是所谓的打乱、洗牌。

Shuffle过程分两个阶段:shuffle write和shuffle fetch。Shuffle write将shuffle MapTask任务产生的中间结果缓存到内存中,shuffle fetch获取shuffleMapTask缓存的中间结果进行shuffleReduceTask计算。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/106043.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python输出保留小数位_python保留两位小数补0

    python输出保留小数位_python保留两位小数补0前言保留小数位是我们经常会碰到的问题,尤其是刷题过程中。那么在python中保留小数位的方法也非常多,但是笔者的原则就是什么简单用什么,因此这里介绍几种比较简单实用的保留小数位的方法:方法一:format函数>>>print(‘{:.3f}’.format(1.23456))1.235>>>print(format(1.23456,’.2f’))1.23正如上面代码所示,format有不同用…

    2022年8月12日
    6
  • git学习六:git提交忽略不必要的文件或文件夹

    git学习六:git提交忽略不必要的文件或文件夹

    2021年10月20日
    28
  • PHP多种形式发送邮件

    1.使用mail()函数没什么好讲的,就是使用系统自带的smtp系统来发送,一般是使用sendmail来发。这个按照各个系统不同而定。使用参考手册。2.使用管道的形式昨天刚测试成功,使用本地的

    2021年12月21日
    47
  • VBA编程_常用函数总结1[通俗易懂]

    VBA编程_常用函数总结1[通俗易懂]文章目录IsEmptyReplaceAscMidRoundIsEmpty  用于判断单元格是否为空:SubMain()ActiveSheet.Cells(7,3).Value=1IfIsEmpty(ActiveSheet.Cells(7,3))ThenDebug.Print”IsEmpty”ElseDebug.Print”NotEmpty”EndIfEndSubReplace  函数原型如下

    2022年5月22日
    38
  • ceres之LM算法「建议收藏」

    ceres之LM算法「建议收藏」Ceres作为一个优化算法库,在许多领域中有着至关重要的作用,比如slam系统中的优化问题-集束调整BA,就可以通过Ceres去实现,官方文档地址:http://ceres-solver.org/nnls_tutorial.html#bundle-adjustment本文主要是解析ceres中的LM算法过程,参考代码地址:https://github.com/ceres-solver/ceres-solver/tree/master/internal/ceres一、主要流程先贴个图,L.

    2022年10月1日
    2
  • robotium 代码

    robotium 代码Robotium之用例分析    http://blog.csdn.net/wirelessqa/article/details/7847466robotium各种方法:http://wenku.baidu.com/link?url=XoPtudf4lgpyzhbLPGJ-6ie8VM2hcCb4Gl6rHozgOrgxWfK52nj-kHzhFbZDkoc_FASztmmPG

    2022年7月25日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号