史上最简单的spark教程第十四章-Spark核心架构之运行原理与架构

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核心架构之运行原理与架构_第1张图片

分布式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等,这个我们会在后续章节中详细讲解

史上最简单的spark教程第十四章-Spark核心架构之运行原理与架构_第2张图片


感兴趣的同学请点个关注哦,持续更新

你可能感兴趣的:(#,spark,#,大数据,拥抱大数据)