基于“血统”(Lineage)的数据恢复:spark引入了弹性分布式数据集RDD的抽象,它是分布在一组节点中的只读的数据的集合,这些集合是弹性的且是相互依赖的,如果数据集中的一部分的数据发生丢失可以根据“血统”关系进行重建。
CheckPoint容错:RDD计算时可以通过checkpoint进行容错,checkpoint有两种检测方式:通过冗余数据和日志记录更新操作。在RDD中的doCheckPoint方法相当于通过冗余数据来缓存数据,而“血统”是通过粗粒度的记录更新操作来实现容错的。CheckPoint容错是对血统检测进行的容错辅助,避免“血统”(Lineage)过长造成的容错成本过高。
FIFO调度:先进先出,这是Spark默认的调度模式。
FAIR调度:支持将作业分组到池中,并为每个池设置不同的调度权重,任务可以按照权重来决定执行顺序。
worker节点通过注册机向cluster manager汇报自身的cpu,内存等信息。
worker 节点在spark master作用下创建并启用executor,executor是真正的计算单元。
spark master将任务Task分配给worker节点上的executor并执行运用。
worker节点同步资源信息和executor状态信息给cluster manager。
Transformation(转换):是对已有的RDD进行换行生成新的RDD,对于转换过程采用惰性计算机制,不会立即计算出结果。常用的方法有map,filter,flatmap等。
Action(执行):对已有对RDD对数据执行计算产生结果,并将结果返回Driver或者写入到外部存储中。常用到方法有reduce,collect,saveAsTextFile等。
任务集的调度管理;
状态结果跟踪;
物理资源调度管理;
任务执行;
获取结果。
sparkContext向cluster Manager申请CPU,内存等计算资源。
cluster Manager分配应用程序执行所需要的资源,在worker节点创建executor。
sparkContext将程序代码和task任务发送到executor上进行执行,代码可以是编译成的jar包或者python文件等。接着sparkContext会收集结果到Driver端。
sparkContext创建RDD对象,计算RDD间的依赖关系,并组成一个DAG有向无环图。
DAGScheduler将DAG划分为多个stage,并将stage对应的TaskSet提交到集群的管理中心,stage的划分依据是RDD中的宽窄依赖,spark遇见宽依赖就会划分为一个stage,每个stage中包含来一个或多个task任务,避免多个stage之间消息传递产生的系统开销。
taskScheduler 通过集群管理中心为每一个task申请资源并将task提交到worker的节点上进行执行。
worker上的executor执行具体的任务。
本文系作者在时代Java发表,未经许可,不得转载。
如有侵权,请联系nowjava@qq.com删除。