Spark面试知识点在哪里?

spark面试必备总结

之前发步的第一篇文章,是刚进驻CSDN发布的第一篇,写的不是很到位。在这里我从新更新一篇,那一篇就作为步入CSDN技术殿堂的一份小礼物吧!以此来警醒自己,让自己变得更加强大。

Spark(集群管理器)架构图

在这里插入图片描述

DAG :有向无环图 有了方向就不会循环。

第一步 :首先初始化 Jvm (Driver),在Driver中创建SparkContext。

第二步:向clusterManager(Master和ResourceManager)请求计算资源,

第三步:ClusterManager,针对相应的计算资源将计算节点 注册在 Driver中。

第四步:DAGScheduler划分Stage阶段,将一个复杂的计算分解成一个个细小的任务,每一个Stage阶段都会包含一个taskSet

第五步:Driver端的TaskScheduler会根据阶段的划分,逐一提交TaskSet,运行在预支的节点上,Spark在运行任务时,TaskSet中的task在线程上运行,进行分布式并行计算。

第六步:当多有的运行任务结束后,SparkContext释放占用的计算资源,通知ClusterManger进行回收。

在这里我想补充一个知识点: MapReduce 的架构流程图

在这里插入图片描述

1、在 client node中,初始化jvm的容器,运行MR应用。初始化job应用。

2、注册job应用在yarn中的Resourcemanage中,返回一个applicationid

3、将job对象的资源(任务jar,计算的切片信息,配置文件)提交到共享文件系统中,

4、正式的将job对象提交到Yarn的resourcemanager中进行计算。

五、六、resourcemanager将闲着的nodemanager初始化一个容器 appmaster用于(监控和管理),并且

进一步初始化,

七步、从File System中获取数据的切片信息。一个split MapTask和ReduceTask(可以手动设置)

八步、MRAppMaster像resourcemanager申请计算资源。

九步、resourcemanager将闲着的nodemanager分配一个yarnchild计算进程来进行计算

第十步、十一步、yarnchild会从文件共享系统中获取 (jar任务、以及计算数据)。进行mapTask和ReduceTask计算

第十二步:所有的计算完成以后,进行释放资源。

两个的功能都是相同的,但是其计算效率却大有改变,101倍的改变,让我们来探讨一下原因:

  • MapReduce:是粗粒度的划分,分为两个阶段 MapTask 和 ResuceTask,而且只支持进程的操作,并且shuffe进行网络传输计算式耗时很高,并且任务不支持并行计算,串联操作导致效率更低.而且也不支持缓存的操作.但是MapRduce给是第一任的大数据计算框架,给社会带来不可磨灭的贡献.
  • 而Spark框架是细粒度的进行划分,划分为stage,stage又划分为Taskset,TaskSet中又有多个Task任务,并且还支持线程的操作.支持大数据并行计算,充分利用了cpu内核.支持缓存和checkpoint检查点机制(可以实现双重容错)操作.并且Spark底层进行了大量优化(内存管理、网络传输、数据序列化、物理引擎、任务管理等,从而提高了计算效率.

特点

  • 高性能:Spark提供了一个先进的计算模型:DAG(Dirtected Acycle Graph有向无环图,计算任务),可以将计算任务划分多个Stage,每一个Stage都支持分布式并行计算。Spark底层进行了大量优化(内存管理、网络传输、数据序列化、物理引擎、任务管理等)
  • 易用性:Spark应用可以基于多种编程语言开发(Scala【推荐】、Java、Python、R、SQL),提供了大概80个操作方法(高阶函数)可以极大简化大数据应用的开发
  • 通用性:Spark拥有一个强大生态库,可以解决大数据的批、流、SQL、Graph、ML、AI、BI等一系列问题
  • 运行环境:Spark应用可以运行在多种集群中环境中,如Yarn、Mesos、K8S、Cloud,或者运行Spark自带资源管理调度系统(Standalone),local模式,常用于测试开发

Spark Core 之RDD

​ RDD:是弹性分布式数据集,是Spark中最为核心的抽象,是 不可变,可分区,容错率高支持并行计算的数据集合。

宽窄依赖的概念:

窄依赖(NarrowDependency) :父RDD中的分区只能被一个子RDD使用 1:1

​ 多个父RDD中分区指向一个子RDD中 N:1

宽依赖(WidthDependency): 父RDD中的分区可以被多个子RDD使用 1:N

RDD的容错机制(三种):

  • (默认的容错机制)重新计算 如果是窄依赖(Narrow):只需执行窄依赖那一部分就可以

    ​ 如果是宽依赖(width): 要重新进行计算。

  • Cache 存储在物理内存中,有利于故障恢复和重复计算,提高效率

  • Checkpoint 一般持久化在hdfs中,但不是立即就会持久化到文件存储系统中,而是先用Mark标记。标记完以后在进行处理。

RDD刨析原理的第七步与第八步 注意: 整体是分为 提交流程---->划分阶段---->封装TaskSet----->提交TaskSet

​ 企业面试中一般会问七八步,这块我只写了第七步和第八步.

第七步:阶段划分

  • 首先获取当前stage的父stage,之后判断看父stage是否为空,如果为空的话,就是最顶端,进行阶段提交,提交该stage的TaskSet。
  • 如果父stage不为空的话,就要判断是否是宽窄依赖了,如果是窄依赖的话,就存到一个arraystack中,等待下一个父类的判断(递归的方式)。如果是宽依赖的话,立即划分stage。

第八步:通过DAGScheduler逐一提交划分好的阶段

根据stage类型,封装不同的Task实例,并且Task数量由当前的分区数量决定。

RDD总结

1、Spark RDD存在血统,(父RDD—>子RDD)关系,分为 窄依赖和宽依赖。
2、Spark RDD在运行时,找到最后一个resultRdd去做反向推导划分stage,如果是窄依赖的 话,将划分在同一个stage中,如果是宽依赖,则立刻划分一个新的stage。
3、对于每一个stage中,都有一个TaskSet(任务集),TaskSet中的每个Task任务与分区数量的比例是1:1,Spark在进行计算时,逐一提交stage
4、Stage在进行TaskSet提交时,会以一种负载均衡的方式提交到多个计算节点上进行分布式并行计算

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值