spark核心架构
史上最简单的spark教程
所有代码示例地址:https://github.com/Mydreamandreality/sparkResearch
(提前声明:文章由作者:张耀峰 结合自己生产中的使用经验整理,最终形成简单易懂的文章,写作不易,转载请注明)
(文章参考:Elasticsearch权威指南,Spark快速大数据分析文档,Elasticsearch官方文档,实际项目中的应用场景)
(帮到到您请点点关注,文章持续更新中!)
Git主页 https://github.com/Mydreamandreality
spark在分布式环境中是主从master/salve的结构
驱动器节点(driver)
spark的集群中,有一个节点负责中央协调.调度各个分布式的工作节点,就是驱动器节点(driver)
执行器节点(worker)
spark的工作节点叫做执行器节点(worker),驱动器节点可以和大量的执行器节点进行通信,都作为独立的Java进程裕运行,驱动器和执行器被称为spark程序 (application)
分布式spark中的组件
spark的应用通过一个外部服务(cluster manager)集群管理器在集群中的机器上启动,
spark自带的集群管理器被称为独立集群管理器
spark能运行在hadoop.yanr和apache mesos这两大开源集群管理器上
详细介绍
驱动器节点:
- spark驱动器是执行我们代码中main方法的进程,它执行我们创建sparkcontext,创建RDD,转换操作,行动操作的代码
- 当我们启动spark-shell的时候,我们就已经启动了spark驱动器,[spark-shell会预先加载sparkcontext对象],驱动器一旦停止,spark应用就结束了
驱动器在spark中的两个主要职责
一:把用户程序转成任务
- spark驱动器程序把用户的程序转成多个物理执行的单元,这些单元也叫作task任务
- 从上层看,所有的spark程序都遵循同样的结构
- 程序获取数据源
- 创建RDD
- 转换操作生成新的RDD
- 行动操作收集或者存储RDD
- spark程序其实是隐式的创建了操作组成的逻辑上的有向无环图
- 当驱动程序执行时,再把逻辑图转成物理执行计划
二:为执行器节点调度任务
- 有了物理执行计划之后,spark驱动器必须在各执行器进程间协调任务的调度,执行器的进程启动之后,会向驱动器进程注册自己,所以驱动器对所有应用中的执行器节点有完整的记录,每个执行器的节点都代表能够处理任务和存储RDD数据的进程
- spark驱动器程序会根据当前的执行器节点集合,尝试把所有任务基于数据所在的位置分配给合适的执行器进程,当任务执行的时候,执行器会把这些数据缓存起来,驱动器程序还会跟踪数据缓存,以达到下次的任务通过数据所在位置进行调度,以减少数据的网络传输
- 驱动器程序会将一些spark应用运行时的信息通过网页呈现
- 可视化界面和监控后面单独拉一章出来讲一下把
执行器节点:
- spark执行器节点是一种工作进程,负责在spark作业中运行任务,任务之间是相互独立的,当spark应用启动时,执行器节点就被同时启动,并且随着spark程序的生命周期而存在或者关闭
- 如果有某个执行器节点发生异常崩溃了,spark程序依然可以正常运行
执行器在spark中的两个主要职责
一:运行spark任务task
- 执行器的主要职责就是运行spark的task任务,并且把结果返回给驱动器进程
二:缓存
- 执行器通过自身的块管理器 block manager,为程序中要求缓存的RDD提供内存式的缓存,是直接缓存到执行器进程的内存中,所以在任务执行时可以充分利用缓存数据运算
集群管理器
- 在spark中,我们依赖于集群管理器来启动执行器节点,但是在某些特定的情况下,我们也依赖外部的集群管理器启动我们的驱动器节点
- 集群管理器是什么?
- 集群管理器是spark中的可插拔式组件
- 比如 yarn或者mesos
外部集群管理器yarn等,这个我们会在后续章节中详细讲解
感兴趣的同学请点个关注哦,持续更新