Spark Core
2023-02-01 10:19:16 0 举报
Spark Core
作者其他创作
大纲/内容
创建 RDD,构建 DAG(分发),并提交给DAGScheduler当碰到 Action 算子时,就会催生 Job,每个 Job 中含有 1 个或多个 Stage
宽依赖指的是父RDD 与子RDD 的Partition 之间的关系是一对多(多胎),宽依赖会有Shuffle 的产生。如reduceByKey、groupByKey 等。
SparkContext
本地(单机)模式;(线程模拟) Spark 自带的资源调度系统(内部hadoop),称为 Spark Standalone 模式;Standalone client(依赖client建Driver ),Standalone cluster(空闲节点建Driver ) YARN 或 Mesos 作为底层资源调度系统以分布式的方式在集中运行,称为 SparkOn YARN 模式或 Spark On Mesos 模式;YARN client(依赖client建Driver ),YARN cluster(空闲节点建AppMaster)
Actor
Stage
每个 Actor 模型都有一个专用的 MailBox 来接收消息并非直接调用 Actor 的方法,而是把消息传递到对应的 MailBox 里Actor 模型发送一条消息是非常快的。
Application 中的 RDD 的转换算子和行动算子,会生成 RDD 之间的依赖关系,多个 RDD 之间的关系又形成一条关系链叫做 RDD 的血统。部分分区数据丢失时,Spark 可以通过这个依赖关系重新计算丢失的分区数据,而不是对 RDD 的所有分区进行重新计算。因为保存血统比保存数据节省空间
ActorRef
Dispatcher Message
Worker
RDD
Driver和 Executor区别a. Driver:申请资源,等资源满足,满足后创建作业,作业被划分为阶段,每个阶段都有一批任务,将任务分配给Executor,同时与Executor通信,接收 Executor执行任务的进度展示在WE UI,如果有任务失败还可以重新尝试b.Executor:工作线程,获取到资源后反向注册Driver,将自己执行任务的进度汇报给 Driver执行人员:工作线程,获取到资源后反向注册驱动程序,将自己执行任务的进度汇报给驱动程序
特点
算子的中间转换,需要重新落盘,有产生Shuffle
stage阶段每个 Job 会被拆分成多个 Task,作为一个 TaskSet 任务集,其名称为 Stage,Stage 的划分和调度是由 DAGScheduler来负责的。Stage 的切割规则为:从后往前,遇到宽依赖就切割Stage
Executor
销毁
细粒度资源申请(cpu资源和内存资源)MapReduce 在 Application 执行之前不需要去提前申请资源,而是直接执行,让Job 中的每一个Task 在执行前自己去申请资源, Task 执行完成就立刻释放资源。优点:集群资源利于率高,缺点:task需要自己申请资源,运行速度满
MailBox
Application
窄依赖指的是父RDD 和子RDD 的Partition (分区)之间的关系是一对一的(独生子女)。如 map、filter 等。
Worker 节点创建 Executor 进程,Executor 向 Driver 进行反向注册;
Stage(TaskSet)
依赖关系
分区列表:并行计算计算向数据靠拢可以决定 k,v数据的来源以及数据处理后的去向。分区计算函数:每个分区都有一个计算函数,将数据和计算逻辑关联起来依赖关系:血缘
YARN client 和 YARN cluster 主要的区别span style=\"font-size: inherit;\
TaskScheduler 负责将 Task 分配到相应的 Worker,最后提交给Executor 执行(发送到 Executor 的线程池中);
完成
心跳
注册完成
Master机器
血统
弹性:弹性存储(内存与磁盘自动切换),弹性容错(数据丢失可以自动恢复)弹性计算(计算出错重试机制),弹性分片(可根据需求重新分片)分布式数据集,封装数据逻辑不保存数据不可变,只能产生新的 RDD,可分区,切分并存储在各个结点的分区当中并行计算,一个分区对应一个任务依赖关系,丢失了,可以根据血缘关系,从父 RDD 计算惰性执行
完成后反馈
状态:Actor 模型中的状态指 Actor 对象的变量信息,状态由 Actor 模型自己管理,避免了并发环境下的锁和内存原子性等问题。行为:Actor 模型中的计算逻辑,通过 Actor 模型接收到的消息来改变 Actor 模型的状态。邮箱:邮箱是 Actor 和 Actor 之间的通信桥梁,邮箱内部通过 FIFO(先入先出)
申请资源
任务失败的处理情况如下:1,当 Task 执行失败时,会由 TaskScheduler 负责重试,将 Task 重新发送给 Executor 去执行,默认重试 3 次。如果重试 3 次依然失败,那么这个 Task 所在的 Stage 就失败了。2,Stage 失败了会由 DAGScheduler 来负责重试,会重新发送 TaskSet 到 TaskScheduler,Stage 默认重试 4 次。如果重试 4次以后依然失败,那么这个 Job 就失败了。Job 失败则 Application 提交失败。3,TaskScheduler 不仅能重试失败的 Task,还会重试 Straggling(落后,缓慢)的 Task。如果有运行缓慢的 Task 那么 TaskScheduler 会启动一个新的 Task 来与这个运行缓慢的 Task 执行相同的处理逻辑。两个 Task 哪个先执行完,就以哪个 Task 的执行结果为准。这就是 Spark 的推测执行机制。在 Spark 中推测执行默认是关闭的。推测执行可以通过spark.speculation 属性来配置。
所有的计算都是在 Actor 中执行的;Actor 之间只能通过消息进行通信,且消息是不可变的;Actor 串行处理并响应消息。它能接收消息并基于消息执行运算,也可以发送消息给其他 Actor 模型。各个 Actor 模型之间相互隔离状态:Actor 模型中的状态指 Actor 对象的变量信息,状态由 Actor 模型自己管理,避免了并发环境下的锁和内存原子性等问题。行为:Actor 模型中的计算逻辑,通过 Actor 模型接收到的消息来改变 Actor 模型的状态。邮箱:邮箱是 Actor 和 Actor 之间的通信桥梁,邮箱内部通过 FIFO(先入先出)与其他 Actor 模型实例处于物理隔离状态,,Actor 模型之间消息的传递是真正物理上的消息传递。天生分布式
不同的运行模式在不同的位置创建 Driver 进程;
五大属性
算子阶段Application:初始化一个 SparkContext 即生成一个 Application;Job 是 Application 的子集,以 Spark Action 算子为界,遇到一个 Action 算子就触发一个 Job;Stage 是 Job 的子集,以 RDD 宽依赖(即 Shuffle)为界,遇到 Shuffle 就做一次划分;Task 是 Stage 的子集,以并行度(分区数)来衡量,分区数是多少,就有多少个 Task。
Client机器
Spark 基于内存的运算要快 100 倍以上,基于硬盘的运算也要快 10 倍 (mapReduce)1、spark是基于内存进行数据处理的,MapReduce是基于磁盘进行数据处理的2、spark中具有DAG有向无环图,DAG有向无环图在此过程中减少了shuffle以及落地磁盘的次数3、spark是粗粒度资源申请
粗粒度资源申请(cpu资源和内存资源)Spark 会在Application 执行之前,将所有的资源申请完毕,当资源申请成功后,才会进行任务的调度,当所有的Task 执行完成后,才会释放这部分资源。优点:所有资源申请完成,task不用自己申请,速度快,缺点:所有的task执行完后才会释放资源
闭包检测
Driver
0 条评论
下一页