zoukankan      html  css  js  c++  java
  • Spark 内核概述 部署模式

    1.Spark 内核概述

      Spark 内核泛指 Spark 的核心运行机制,包括 Spark 核心组件的运行机制、Spark
    任务调度机制、Spark 内存管理机制、Spark 核心功能的运行原理等,熟练掌握 Spark
    内核原理,能够帮助我们更好地完成 Spark 代码设计,并能够帮助我们准确锁定项
    目运行过程中出现的问题的症结所在。
     
     

    1.1 Spark 核心组件回顾

    1.1.1 Driver

      Spark 驱动器节点,用于执行 Spark 任务中的 main 方法,负责实际代码的执行
    工作。Driver 在 Spark 作业执行时主要负责:
      1. 将用户查询转化为任务;
      2. 在 Executor 之间调度任务(job)
      3. 跟踪 Executor 的执行情况(task)
      4. 通过 UI 展示查询运行情况;
     
     

    1.1.2 Executor

      Spark Executor 节点是一个 JVM 进程,负责在 Spark 作业中运行具体任务,任
    务彼此之间相互独立。Spark 应用启动时,Executor 节点被同时启动,并且始终伴
    随着整个 Spark 应用的生命周期而存在。如果有 Executor 节点发生了故障或崩溃,
    Spark 应用也可以继续执行,会将出错节点上的任务调度到其他 Executor 节点上继
    续运行。
     
    Executor 有两个核心功能:
      1. 负责运行组成 Spark 应用的任务,并将结果返回给驱动器进程;
      2. 它们通过自身的块管理器(Block Manager)为用户程序中要求缓存的 RDD
    提供内存式存储。RDD 是直接缓存在 Executor 进程内的,因此任务可以在运行时
    充分利用缓存数据加速运算。
     
     

    1.2 Spark 通用运行流程概述

     
      图 1-1 为 Spark 通用运行流程,不论 Spark 以何种模式进行部署,任务提交后,
    都会先启动 Driver 进程,随后 Driver 进程向集群管理器注册应用程序,之后集群管
    理器根据此任务的配置文件分配 Executor 并启动,当 Driver 所需的资源全部满足后,
    Driver 开始执行 main 函数,Spark 查询为懒执行,当执行到 action 算子时开始反向
    推算,根据宽依赖进行 stage 的划分,随后每一个 stage 对应一个 taskset,taskset 中
    有多个 task,根据本地化原则,task 会被分发到指定的 Executor 去执行,在任务执
    行的过程中,Executor 也会不断与 Driver 进行通信,报告任务运行情况。
     
     
     
     

    2.Spark 部署模式

      Spark 支持 3 种集群管理器(Cluster Manager),分别为:
      1. Standalone:独立模式,Spark 原生的简单集群管理器,自带完整的服务,
    可单独部署到一个集群中,无需依赖任何其他资源管理系统,使用 Standalone 可以
    很方便地搭建一个集群;
      2. Apache Mesos:一个强大的分布式资源管理框架,它允许多种不同的框架部
    署在其上,包括 yarn;
    3. Hadoop YARN:统一的资源管理机制,在上面可以运行多套计算框架,如
    map reduce、storm 等,根据 driver 在集群中的位置不同,分为 yarn client 和 yarn
    cluster。
     
      实际上,除了上述这些通用的集群管理器外,Spark 内部也提供了一些方便用户
    测试和学习的简单集群部署模式。由于在实际工厂环境下使用的绝大多数的集群管
    理器是 Hadoop YARN,因此我们关注的重点是 Hadoop YARN 模式下的 Spark 集群
    部署。
      Spark 的运行模式取决于传递给 SparkContext 的 MASTER 环境变量的值,个别
    模式还需要辅助的程序接口来配合使用,目前支持的 Master 字符串及 URL 包括:
     
                        表 2-1 Spark运行模式配置

    Master URL

    Meaning

    local

    在本地运行,只有一个工作进程,无并行计算能力。

    local[K]

    在本地运行,有 K 个工作进程,通常设置 K 为机器的

    CPU 核心数量。

    local[*]

    在本地运行,工作进程数量等于机器的 CPU 核心数量。

    spark://HOST:PORT

    以 Standalone 模式运行,这是 Spark 自身提供的集群运行模式,默认端口号: 7077。详细文档见:Spark standalone

    cluster。

    mesos://HOST:PORT

    在 Mesos 集群上运行,Driver 进程和 Worker 进程运行在 Mesos 集群上,部署模式必须使用固定值:--deploy-mode

    cluster。详细文档见:MesosClusterDispatcher.

    yarn-client

    在 Yarn 集群上运行,Driver 进程在本地, Work 进程在 Yarn 集群上, 部署模式必须使用固定值:--deploy-mode

    client。Yarn  集群地址必须在

    HADOOP_CONF_DIRorYARN_CONF_DIR  变量里定义。

    yarn-cluster

    在 Yarn 集群上运行,Driver 进程在 Yarn 集群上,Work 进程也在 Yarn 集群上,部署模式必须使用固定

    值:--deploy-mode cluster。Yarn 集群地址必须在

    HADOOP_CONF_DIRorYARN_CONF_DIR  变量里定义。

     
     
    用户在提交任务给 Spark 处理时,以下两个参数共同决定了 Spark 的运行方式。
    · –master MASTER_URL :决定了 Spark 任务提交给哪种集群处理。
    · –deploy-mode DEPLOY_MODE:决定了 Driver 的运行方式,可选值为 Client
    或者 Cluster。
     
     
     

    2.1 Standalone 模式运行机制

      Standalone 集群有四个重要组成部分,分别是:
      1) Driver:是一个进程,我们编写的 Spark 应用程序就运行在 Driver 上,由
    Driver 进程执行;
      2) Master:是一个进程,主要负责资源的调度和分配,并进行集群的监控等职
    责;
      3) Worker:是一个进程,一个 Worker 运行在集群中的一台服务器上,主要负
    责两个职责,一个是用自己的内存存储 RDD 的某个或某些 partition;另一个是启动
    其他进程和线程(Executor),对 RDD 上的 partition 进行并行的处理和计算。
      4) Executor:是一个进程,一个 Worker 上可以运行多个 Executor,Executor
    通过启动多个线程(task)来执行对 RDD 的 partition 进行并行计算,也就是执行我
    们对 RDD 定义的例如 map、flatMap、reduce 等算子操作。
     
     
     

    2.1.1 Standalone Client 模式

      在 Standalone Client 模式下,Driver 在任务提交的本地机器上运行,Driver 启动
    后向 Master 注册应用程序,Master 根据 submit 脚本的资源需求找到内部资源至少可
    以启动一个 Executor 的所有 Worker,然后在这些 Worker 之间分配 Executor,Worker
    上的 Executor 启动后会向 Driver 反向注册,所有的 Executor 注册完成后,Driver 开
    始执行 main 函数,之后执行到 Action 算子时,开始划分 stage,每个 stage 生成对
    应的 taskSet,之后将 task 分发到各个 Executor 上执行。
     
     
     

    2.1.2 Standalone Cluster 模式

      在 Standalone Cluster 模式下,任务提交后,Master 会找到一个 Worker 启动 Driver
    进程, Driver 启动后向 Master 注册应用程序,Master 根据 submit 脚本的资源需求
    找到内部资源至少可以启动一个 Executor 的所有 Worker,然后在这些 Worker 之间
    分配 Executor,Worker 上的 Executor 启动后会向 Driver 反向注册,所有的 Executor
    注册完成后,Driver 开始执行 main 函数,之后执行到 Action 算子时,开始划分 stage,
    每个 stage 生成对应的 taskSet,之后将 task 分发到各个 Executor 上执行。
      注意,Standalone 的两种模式下(client/Cluster),Master 在接到 Driver 注册
    Spark 应用程序的请求后,会获取其所管理的剩余资源能够启动一个 Executor 的所
    有 Worker,然后在这些 Worker 之间分发 Executor,此时的分发只考虑 Worker 上的
    资源是否足够使用,直到当前应用程序所需的所有 Executor 都分配完毕,Executor
    反向注册完毕后,Driver 开始执行 main 程序。

    2.2 YARN 模式运行机制

    2.2.1 YARN Client 模式

     

      在 YARN Client 模式下,Driver 在任务提交的本地机器上运行,Driver 启动
    后会和 ResourceManager 通讯申请启动 ApplicationMaster,随后 ResourceManager
    分 配 container , 在 合 适 的 NodeManager 上启动 ApplicationMaster ,此时的
    ApplicationMaster 的功能相当于一个 ExecutorLaucher,只负责向 ResourceManager
    申请 Executor 内存。
      ResourceManager 接到 ApplicationMaster 的资源申请后会分配 container,然后
    ApplicationMaster 在资源分配指定的 NodeManager 上启动 Executor 进程,Executor
    进程启动后会向 Driver 反向注册,Executor 全部注册完成后 Driver 开始执行 main
    函数,之后执行到 Action 算子时,触发一个 job,并根据宽依赖开始划分 stage,每
    个 stage 生成对应的 taskSet,之后将 task 分发到各个 Executor 上执行。

    2.2.2 YARN Cluster 模式

      在 YARN Cluster 模式下,任务提交后会和 ResourceManager 通讯申请启动
    ApplicationMaster,随后 ResourceManager 分配 container,在合适的 NodeManager
    上启动 ApplicationMaster,此时的 ApplicationMaster 就是 Driver。
      Driver 启动后向 ResourceManager 申请 Executor 内存,ResourceManager 接到
    ApplicationMaster 的资源申请后会分配 container,然后在合适的 NodeManager 上启
    动 Executor 进程,Executor 进程启动后会向 Driver 反向注册,Executor 全部注册完
    成后 Driver 开始执行 main 函数,之后执行到 Action 算子时,触发一个 job,并根据
    宽依赖开始划分 stage,每个 stage 生成对应的 taskSet,之后将 task 分发到各个
    Executor 上执行。
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    Knowing how all your components work together: distributed tracing with Zipkin
    Java Annotation Processors
    深度剖析JDK动态代理机制
    Java 代理模式(二) Java中的动态代理
    Java 代理模式(一) 静态代理
    CGLib动态代理原理及实现
    Understanding sun.misc.Unsafe
    Finding Memory Leaks with SAP Memory Analyzer
    ubuntu18.04 安装mysql server
    Sqoop+mysql+Hive+ Ozzie数据仓库案例
  • 原文地址:https://www.cnblogs.com/LXL616/p/11163703.html
Copyright © 2011-2022 走看看