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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 定时任务cron表达式详解_el表达式详解

    定时任务cron表达式详解_el表达式详解@Scheduled(cron=”******”)cron表达式详解1.cron表达式格式:{秒数}{分钟}{小时}{日期}{月份}{星期}{年份(可为空)}2.cron表达式各占位符解释:{秒数}==>允许值范围:0~59,不允许为空值,若值不合法,调度器将抛出SchedulerException异常”*”代表每隔1秒钟触

    2025年6月27日
    2
  • android中gravity和layoutgravity的区别[通俗易懂]

    android中gravity和layoutgravity的区别[通俗易懂]android中gravity和layoutgravity的区别_百度知道1个回答-最新回答:2015年02月07日-1人觉得有用[专业]答案:android:gravity:设置的是控件自身上面的内容位置android:layout_gravity:设置控件本身相对于父控件的显示位置。

    2022年7月26日
    4
  • flake8配置_errorflashdownloadfailed-could

    flake8配置_errorflashdownloadfailed-couldflake8错误码

    2025年11月8日
    2
  • vue将时间戳转换成日期格式[通俗易懂]

    (1)创建一个处理时间格式的js,内容如下:exportfunctionformatDate(date,fmt){if(/(y+)/.test(fmt)){fmt=fmt.replace(RegExp.$1,(date.getFullYear()+”).substr(4-RegExp.$1.length))}leto={…

    2022年4月5日
    1.2K
  • NAND FLASH_Flash下载

    NAND FLASH_Flash下载作者:德州仪器现场技术支持工程师孟海燕概要:本文介绍了DM368NANDFlash启动的原理,并且以DM368 IPNC参考设计软件为例,介绍软件是如何配合硬件实现启动的。关键字:NANDFlash启动,RBL,UBL           芯片上电后是如何启动实现应用功能的?这是许多工程师在看到处理器运行的时候,通常都会问的一个问题。下面我们就以德州仪器的多媒体处理芯

    2022年8月13日
    6
  • vim常用命令详解(vim使用教程)

    目录本文解读来自我对manvim的解读vim介绍vim基本操作打开文件options详解vim的五种模式(是我自己定义的五种)正常模式必要命令详解末行模式常用命令详解可视模式常用命令详解本文解读来自我对manvim的解读当然有很多解读不准确的地方,所有红色标注的地方都是最基本的,也是保证正确的。(不排除我的语言描述有问题)vim介绍vim…

    2022年4月11日
    83

发表回复

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

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