• Spark核心原理


    Spark核心原理

    spark 运行架构

                                  

    Application (应用程序) : 用户编写的Spark应用程序,包含 DriverProgram (驱动程序)和 在分布由集群

                                        中节点上运行的Executor代码,在执 行过程由一个或者多个作业组成;

                      Driver (驱动程序):为应用程序Application的main函数创建SparkContext,

                                                       为Spark运用程序创建运行环境;

                                        由SparkContext 负责与ClusterManager通信进行资源的分配,任务分配,监控等;

                                        当Executor 运行结束, 由Driver 关闭SparkContext ;

                      Cluster Manager(集群资源管理器):在集群上获取资源的外部管理器, 以下几种 : 

                                   Standalone: Spark原生资源管理,由Master 负责资源管理

                                   Hadoop Yarn:由YARN 的Resource Manager负责资源管理;

                                   Mesos : 由Mesos 中的Mesos Master 负责资源管理; 

    Master(总控进程) : Spark Standalone 运行模式下的主节点;

                                      管理和分配资源来运行Spark Application;

    Worker(工作节点):集群中任何运行Application代码的节点, 类似于YARN中的NodeManager, 在standLone中通过

                                         slave 文件配置的Worker节点, 在Spark On Yarn 中就是Node Manager;

                     Executor(执行进程) : Application运行在Worker 上的进程;

    1、消息通信原理

    1.1、 Spark 消息通信架构

                       

    1.2 Spark 启动消息通信 

          Spark 启动过程中,主要运行Master 和 Worker 的通信;

          Worker 向Master 发送注册消息, 如果Master在standby 则忽略该申请;该Worker已经注册,则返回注册失败;

    如果Worker注册Master成功, Master则返回消息,并监听Worker的心跳消息;         

         

    1.3 Spark运行时消息通信 

             用户提交应用程序时,应用程序的SparkContext 会向Master 发送应用注册消息, 并由Master给该应用分配

    Execuator;

             Executor启动后,Executor向SparkContext 发送注册成功消息;

             当SparkContext 的RDD触发行动操作后,创建RDD的DAG, 通过DAG Scheduler 进行划分 stage并将 stage

    转化为 TaskSet;

             再由 TaskScheduler 向注册的Executor发送执行消息, Execuator接收到任务消息后启动运行;

             当所有任务运行时, 由Driver处理结果并回收资源

    2、作业执行原理

         Spark 作业和任务调度系统中的术语:

             Job(作业):RDD中由行动操作生成的一个或多个调度阶段;

             Stage (调度阶段):每个作业因为RDD之间的依赖挂你拆分为多组任务集合,称为调度阶段,也叫任务集。

                                              调度阶段的划分由DAGScheduler来划分,调度阶段由Sheffle Map Stage 和Result Stage两种

             Task ( 任务) : 分发到Excutor上的任务;

              DAG Scheduler : 面向调度阶段的任务调度器;

                                          接收Spark应用提交的作业,根据RDD的依赖关系划分调度阶段,'

                                          并提交调度阶段给Task Scheduler

              Task Scheduler : 面向任务的调度器, 接收 DAG Scheduler 提交的调度阶段, 然后把任务发送Work节点运行,

                                          由Worker 节点的Excutor 运行该任务;

    2、概述

                      

          1)spark应用程序进行各种转换操作,并通过转化操作触发作业运行;

                提交作业后, 根据RDD的依赖关系构建DAG图,并将DAG图给DAGScheduler解析;

           2)DAGScheduler 把DAG 拆分为互相依赖的调度阶段,调度阶段以宽依赖作为划分依据,

                 调度阶段包含一个或多个任务,形成任务集,交给TaskScheduler调度运行; 

                 DAG 还要记录哪些RDD 存入磁盘等动作,并需求任务最优调度;

           3)TaskScheduler 将任务集一个个分发到Worker节点的Executor运行,失败则需要重新运行;

           4)Worker中的Executor收到TaskScheduler的任务后,以多线程的方式运行,

                 一个线程运行一个任务;

                 完成任务后返回个TaskScheduler;    

                                       

                         

                      

    ==================================================================

    资料来源:  1.《Spark权威指南》

                      2. 《图解Spark核心技术和实例实战》                                

  • 相关阅读:
    Gym101630A Archery Tournament
    BZOJ2588 Count on a tree
    Redis主从复制
    Redis事务
    Redis持久化RDB和AOF
    设计模式之代理模式
    Spring AOP(面向切面编程)
    基于TCP和UDP的Socket通信
    Ajax无法访问回调函数seccess问题
    SpringBoot Ajax跨域问题(session共享问题)
  • 原文地址:https://www.cnblogs.com/Jomini/p/12497245.html
Copyright © 2020-2023  润新知