SparkCore概念总结

SparkCore😏



一、什么是Spark?

Spark专门为大规模数据进行快速处理的计算引擎,主要分为SparkCore、SparkSql、SparkStreaming,SparkStreaming可以做到准实时,Spark由Scala编写


二、Spark与MapReduce比较

Spark对于数据的计算方式,是一次性执行全部的逻辑,并且依赖内存,一次性将结果得出,MapReduce计算方式,是通过数据的一次计算后存于磁盘,再从磁盘读取再次计算,这也是MapReduce没有Spark快的主要原因之一

三、Spark运行模式
  • Local:便于测试环境,比如再IDEA等编辑器中使用
  • Standalone集群模式:是Spark自带的资源掉丢框架,支持完全分布式
  • Yarn集群模式:Hadoop生态圈提供,Spark也可通过Yarn进行计算
  • Mesos:资源调度框架
    注意:Spark为什么可以使用Yarn框架?
    是因为如果使用Yarn,满足条件就是必须实现ApplicationMaster接口,而Spark实现了这个接口,所有可以基于Yarn

四、Spark分区方式?

首先Spark提出了RDD的概念,一种数据集,也就是由多个分区组合而成,且分区大小不一,数量由任务里算子和最初的读入的数据块数量决定的
两种分区方式:
① HashPartitioner哈希分区:对K-V格式的数据进行hash后和分区数进行求余获取数据应该存放的分区号
② RangetPartitioner范围分区:针对于hash分区会造成数据倾斜,也就数据分布不均匀的情况的补充,其方式针对于抽样的方式进行数据的分区


五、RDD五大属性

首先RDD是一个弹性分布式数据集(弹性体现在每个RDD内的分区数大小不固定,分布式体现在,分区分布在不同的节点上),RDD内不存数据,只是pipeline的一段计算
五大 属性:
① RDD由多个分区组成
② RDD之间互相依赖(血缘关系)
③ 分区器用于(k,v)格式的RDD上
④ 函数作用再每个分区或切片上
⑤ RDD会计算出最佳的计算位置
注意
1、文件的读取方式是MR的方式,读取文件之前先进行切片,模式一个切片是一个block快的大小
2、什么是k,v格式的RDD?
即数据格式是(k,v)二元组数据类型格式的RDD
RDD提供计算的最佳位置,体现了**计算移动数据不移动的思想**


六、Spark系统架构

在这里插入图片描述

整体架构于Yarn类似,整体流程:
首先提交JOB任务,Worker(监控当前节点的资源情况)开始会将资源情况汇报给主节点Master,Driver接受到JOB后,向主节点询问资源情况,获取资源后将任务分发至指定节点上的executor执行器,执行器启动内部的task任务,任务执行完毕汇报情况给Driver,再由Driver汇报给主节点,最后退出本次任务


七、算子(单文件)

Spark中RDD之间互相依赖,故此再启动后,会产生一个有向无环图DAG

  • 转换算子(Transformations):对数据进行切分合并等操作,就是一个函数,惰性加载
    例如:filter:过滤满足条件的(true:保留,false:过滤掉)
    map于flatMap的区别?
    虽然都是转换函数并且极其相似,细微不同于map函数后,RDD的值为 Array(Array(“a”,“b”),Array(“c”,“d”),Array(“e”,“f”)),flatMap函数处理后,RDD的值为 Array(“a”,“b”,“c”,“d”,“e”,“f”),也就是flatMap会将数组的进行拆解合并成一个数组
    reduceBykey和groupBykey的区别?【看之前文章】

  • 行动算(Action):触发算子,通过此算子启动控制算子和转换算子,一个任务中,有几个Action算子执行,就有几个job运行
    常见算子:count(),take(n)返回前n个元素集合,first=take(1)返回第一个数据元素,foreach,collect收集结果

  • 控制算子:也是RDD的持久化,主要就三种:cache,persist,checkpoint,三者皆是懒执行
    谈谈cache、persist、checkpoint三者的区别
    cache:将RDD数据集持久化到内存中,persist(xxx)通过不同的参数,可以进行内存持久化,磁盘持久化等,较为全面,checkpoint则是进行持久化到磁盘,cache=persist(Memory_Only),三者中checkpoint持久化会切断RDD之间的联系,但都是为了防止数据后期出错时,快速恢复数据

八、算子(多文件)

转换算子:

  • leftOuterJoin/rightOuterJoin/fullOuterJoin这些算子都是作用在k,v格式的RDD上的,根据key值进行连接(注意 join后的分区数于RDD数据多的那个相同
    union:合并两个数据集,两个数据集的类型要一致
    intersection:取两个数据集的交集
    subtract:取两个数据集的差集
    mapPartitions:mapPartition于map类似,单位是每个partition上的数据
    distinct(map+reduceByKey+map):对RDD内数据去重
    cogroup:当调用类型(k,v)和(k,w)的数据上时,返回一个数据集(k,(v,w))

行动算子:

  • foreachPartition:遍历的数据时每个partition的数据

九、窄依赖和宽依赖的认识

窄依赖

  • RDD之间父RDD与子RDD之间的分区数时一对一或者多对一的关系时是窄依赖,窄依赖不会产生shuffle洗牌
    宽依赖
  • 父RDD与子RDD的关系是一对多的关系,便是宽依赖,会产生shuffle
    (注意Stage划分也是根据宽依赖划分的)
    在这里插入图片描述

十、stage切割规则

stage是一个逻辑概念
切割规则:从后往前,遇到宽依赖就切割stage,总结由于spark中stage的划分是根据shuffle来划分的,而宽依赖必定会有shuffle的产生,因此可以说spark是根据款窄依赖划分的,并且stage内只有窄依赖
在这里插入图片描述


十一、SparkShuffle机制

HashShuffle

  • 普通机制:
    在这里插入图片描述
    每个任务都有一个Buffer缓存,都会产生一个中间结果,然后分布给下面的子RDD
  • 合并机制:
    在这里插入图片描述
    再父RDD中的缓存中对数据先进行了一次合并,使得到子RDD时大大降低传输的压力

SortShuffle:

  • 普通机制:
    在这里插入图片描述
    map执行中会有一个监控机制取定时监控内存的大小,内存结构中的数据超过5M则会申请新的*2-5的内存,如果申请失败则进行溢写,reduce拉取则通过解析索引文件拉取对应文件数据
  • bypass机制:
    在这里插入图片描述
    此机制触发条件是:shuffle reduce task数量小于200,或者不需要map端预聚合,产生的磁盘小文件为2*M时都会触发

十二、Spark资源调度和任务调度流程

在这里插入图片描述
注意:再流程中,task发送到执行器失败会重试三次,三次失败则task这次任务失败,而stage包含多个任务,stage失败会重试4次,stage失败代表此次job失败

  • 流程:具体流程与系统架构流程一致,只是此图具体细化了Driver内的进程

十三、谈谈广播变量和累加器

广播变量:再Driver端定义一个变量,然后广播到每个Executor中,类似公共变量(此变量之能再Driver端定义,并且只有Driver端能够修改广播变量的值,Executor不能修改广播变量的值)
在这里插入图片描述
累加器:在Driver声明一个变量,在Executor更新,如果不设置累加器,则在Executor端更新后,可能导致多个Executor执行结果不准
在这里插入图片描述


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每日小新

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值