spark架构
master:集群资源管理和调度
worker:单个节点的资源管理
executor:对数据进行并行处理
driver:应用逻辑执行的起点
spark构成
clustermanager:standlone模式中为master,即主节点,控制整个集群,监控worker,在yarn模式中为资源管理器。
worker:从节点,负责控制计算节点,启动executor或driver,在yarn模式中为nodemanger,负责计算节点的控制。
driver:运行application的main函数,并且创建sparkcontext。
executor:执行器,是为某个application运行在worker 弄得上的一个进程,启动线程池运行任务,每个application拥有独立的一组executors。
sparkcontext:整个应用的上下文,控制应用的生命周期。
rdd:spark的基本计算单元,一组rdd形成执行的有向无环图rddgraph。
dag scheduler :根据job构建基于stage的dag, 并提交给taskscheduler.
taskscheduler:将task分发给executor执行
sparkenv: 线程级别的上下文,存储运行时的重要组件的引用。
client提交应用,master找到一个worker启动driver,driver向master或者资源管理器申请资源,之后将应用转换为rdd graph, dagscheduler将rdd graph转换为stage的有向无环图提交给taskscheduler,由taskschedule提交任务给executor进行执行。任务执行过程中其他组件协同工作确保整个应用顺利执行。
spark的工作机制
spark作业:
application:用户自定义的spark 程序,用户提交后,spark为APP分配资源将程序转换执行。
driverprogram:运行application的main函数并且创建sparkcontext。
rdddag: 当rdd遇到action算子,将之前的所有算子形成一个有向无环图。再在spark中转换为job,提交到集群进行执行。一个APP中可以包含多个job。
job:一个rdd graph触发的作业,往往是由sparkaction算子触发,在sparkcontext中通过runjob方法向spark提交job。
stage:每个job会根据rdd 的宽依赖关系被切分成很多stage,每个stage中包含一组相同的task,这一组task也叫taskset。
task:一个分区对应一个task,task执行rdd中对应stage中所包含的算子,task被封装好后放入executor的线程池中执行。
spark运行流程
spark程序转换
输入数据块
根据调度策略执行各个stage的tasks
输出结果返回
spark计算模型
数据结构RDD + 算法(transformation, action)