SparkCore

本质(是什么)(我在试着讲明白)

RDD:弹性分布式数据集,spark中最基本的数据抽象

一个RDD是一个不可改变的分布式集合对象
一个RDD内部由许多partitions(分片)组成

作用(干什么)(我在试着讲明白)

mr是一次性数据处理,而rdd可以迭代计算、交互式计算,对同一数据集反复迭代计算

架构(有什么)(我在试着讲明白)

在这里插入图片描述
在这里插入图片描述
a、 partitions
代表着RDD中的数据的逻辑结构,每个partition会映射到某个节点内存或者硬盘的一个数据块
b、SparkContext
是所有spark功能的入口,代表与spark节点的连接,用来创建rdd对象及刚播变量等,一个线程只有一个sparkcontext
c、sparkconf
配置信息
d、partitioner
决定了rdd的分区方式;主流的方式:hash partioner 和 range partitioner 。
hash 是对数据key进行散列分布,rang是按照key的排序进行的分区
e、dependendies
依赖关系,记录了rdd 的计算过程。
窄依赖:父rdd的分区一 对 一 子rdd的分区
宽依赖:父rdd的分区一 对 多 子rdd的分区
在这里插入图片描述
在这里插入图片描述
f、checkpoint
检查点机制,可以将它缓存到硬盘或者 HDFS 中,标记这个 RDD 有被检查点处理过,并且清空它的所有依赖关系。同时,给它新建一个依赖于 CheckpointRDD 的依赖关系,CheckpintRDD 可以用来从 硬盘中读取 RDD 和生成新的分区信息。
这么做之后,当某个 RDD 需要错误恢复时,回溯到该 RDD,发现它被检查点记录过,就可以直接去硬盘读取该 RDD,无需重新计算。
g、Preferred Location
针对每一个分片,都会选择一个最优的位置来计算,数据不动,代码动。
h、Storage Level
用来记录 RDD 持久化时存储的级别
i、Iterator
迭代函数和计算函数是用来表示 RDD 怎样通过父 RDD 计算得到的。

优缺点(我在试着讲明白)

优点

缺点

流程(怎么运作)(我在试着讲明白)

代码流程

  1. val conf = new SparkConf().setAppName 。。。setMaster。。。
  2. val sc = new SparkContext(conf)
  3. 由 sc 得到RDD
  4. 对RDD 进行transformation类算子进行转换
  5. 对RDD使用Action算子出发Transformation类算子执行
  6. sc.stop()

资源调度流程

在这里插入图片描述

  1. 集群启动,worker向master汇报资源,master掌握资源
  2. 当代码new sparkcontext时,会创建DAGScheduler和TaskScheduler
  3. TaskScheduler向master申请资源
  4. master找到满足资源的节点,启动Executor
  5. Exeuctor启动之后反向注册给driver,driver掌握了一批资源

任务调度流程

  1. Action算子触发job,job中的RDD之间依赖关系形成DAG有向无环图
  2. DAGScheduler按照RDD之间的宽窄依赖关系,切割每个job,划分stage,将stage以task形式提交TaskScheduler
  3. TaskScheduler遍历taskSet,拿到一个个task,发送到Executor中的线程池中执行
  4. TaskScheduler监控task,回收结果

如果:第3步,task发送失败,有taskScheduler重试,重试3次之后,依然失败,那么由DADScheduler重试stage,重试4次之后失败,那么stage所在的job就失败了,Application就失败了
TaskScheduler:不仅可以重试执行失败的task,还可以重试执行缓慢的task,这就是spark中的推测执行机制,默认是关闭的,对于ETL的业务,要关闭推测执行。

如果:在task执行过程中,发现某些task执行非常缓慢。
1. 是否有数据倾斜
2. 是否开启的推测执行

常用(必会)(我在试着讲明白)

RDD常用的几个Action算子

在这里插入图片描述
在这里插入图片描述

常见问题(必知)(我在试着讲明白)

spark区分宽窄依赖的原因是什么?

  1. 窄依赖支持在同一节点进行链式操作,比如在执行了map之后,紧接着执行filter操作。相反,宽依赖需要所有父分区都是可用的
  2. 失败恢复角度:窄失败恢复更有效,而宽涉及到rdd的各级多个父分区

RDD的弹性哪里体现?

  1. RDD的分区可多可少
  2. RDD之间的依赖关系

哪里体现了RDD的分布式

RDD 的partition是分布在多个节点上的

textFile读取HDFS文件的方法底层?

是调用mr读取HDFS文件的方法,先split对应的一个block,每个split对应一个partition

异议

有差错或者需要补充的地方,还望大家评论指出,并详细论证,相互学习,共同进步哈!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值