Spark On Local模式

基本原理

本质启动一个JVM Process进程(一个进程里面有多个线程),执行任务Task

  • Local模式可以限制模拟Spark集群环境的线程数量,即Local[N]Local[*]
  • 其中N代表可以使用N个线程,每个线程拥有一个cpucore。如果不指定N,则默认是1个线程(该线程有1个core)。通常cpu有几个Core,就指定几个线程最大化利用计算能力。
  • 如果是loca[*],则代表 Run Spark locally with as many worker threads asLogical cores on your machine.按照Cpu最多的逻辑Cores设置线程数

Local 下的角色分布:

  • 资源管理:

    • Master:Local进程本身
    • Worker:Local进程本身
  • 任务执行:

    • Driver:Local进程本身
    • Executor:不存在,没有独立的Executor角色,由Local进程 (也就是Driver) 内的线程提供计算机能力

:::note Driver也是一种特殊的Executor,只不过多数时候,我们将Executor当做纯Worker对待,这样好与Driver区分

Local模式只能运行一个Spark程序,如果执行多个Spark程序,那就是由多个相互独立的Local进程在执行 :::

Spark On Standalone模式

Standalone模式是Spark自带的一种集群模式,不同于前面本地模式启动多个进程来模拟集群的环境,Standalone模式是真实地在多个机器之间搭建5park集群的环境,完全可以利用该模式搭建多机器集群,用于实际的大数据处理。

  • StandAlone是完整的spark运行环境,其中:
    • Master角色以Master进程存在
    • Worker角色以Worker进程存在
    • Driver角色在运行时存在
  • Spark Standalone 集群中的主要进程
  1. 主节点 Master 进程

    • 角色:Master
    • 作用:管理整个集群的资源,并托管运行各个任务的 Driver。
  2. 从节点 Worker 进程

    • 角色:Worker
    • 作用:管理每台机器上的资源,并分配资源来运行 Executor(即 Task)。
      • 每个从节点的资源信息由 Worker 进行管理,资源信息包括:
        • 内存(Memory)
        • CPU 核数(CPUCores)
  3. 历史服务器 HistoryServer(可选)

    • 作用:用于查看已运行应用的相关信息和日志,便于审计和调试。

:::note 在Standalone Client模式下,如果在Master 上提交应用,那么 Driver就在Master;如果在 Worker上提交应用,那么 Driver 就在 Worker :::

Spark On Standalone HA On Zookeeper 模式

HA模式原理

  1. Master节点高可用

    • 在标准的 Standalone 模式下,只有一个 Master 进程负责管理整个集群。如果 Master 出现故障,集群将无法继续工作。而在 HA 模式下,可以配置多个 Master,Zookeeper 会负责 Master 的故障切换。
    • Zookeeper 监控多个 Master 节点,其中一个 Master 被选为活跃 Master(Active Master),其余的 Master 作为备用(Standby Master)。
    • 如果当前的活跃 Master 出现问题,Zookeeper 会从 Standby Master 中选取一个替代它,继续管理集群。
  2. Driver 和 Executor 的管理

    • 当 Driver 进程与 Master 交互时,它会向 Zookeeper 查询当前的活跃 Master,避免由于 Master 切换造成任务的中断。
    • Executor 依然由 Worker 节点负责运行,当切换 Master 时,Executor 不受影响。

Zookeeper 在 HA 模式中的作用

  • Leader选举:Zookeeper 通过领导者选举协议确保整个集群始终有一个活跃的 Master。
  • 集群管理:Zookeeper 记录集群的 Master 角色状态,并对集群节点的变化(如新增或移除节点)进行监控。
  • 故障切换:当活跃 Master 崩溃时,Zookeeper 立刻触发选举,选出新的活跃 Master 并更新集群配置。

工作流程

  1. 在 Spark Standalone 集群启动时,多个 Master 通过 Zookeeper 进行注册。
  2. Zookeeper 选举出一个活跃的 Master,其他的 Master 处于备用状态。
  3. 活跃 Master 负责调度集群中的任务,管理 Worker 节点。
  4. 如果活跃 Master 失效,Zookeeper 通过心跳检测发现异常,并立即选举出一个新的活跃 Master。

(图片来源)https://zhengxingtao.com/archives/sparkbu-shu-zhi-ha

HA 模式下的配置

为了实现 Master 的高可用性,集群的配置文件中需要添加以下配置:

  1. 配置 spark-env.sh 文件: 在所有 Master 节点上配置相同的 Zookeeper 地址:

    SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER \
    -Dspark.deploy.zookeeper.url=<zk1>:2181,<zk2>:2181,<zk3>:2181 \
    -Dspark.deploy.zookeeper.dir=/spark"
    
  2. 配置 Master 的启动脚本: 所有 Master 通过 spark-class 启动时,需要指定 HA 模式:

    ./sbin/start-master.sh --host <master-host> --port <port> --webui-port <webui-port>
    

优势

  1. 容错性:Master 节点的故障不会导致集群中断,Zookeeper 能够迅速完成切换。
  2. 自动化管理:Zookeeper 负责监控集群状态,不需要人工介入管理。
  3. 扩展性:集群中的节点可以动态增加或减少,而不影响集群的正常运行。

Spark On Yarn模式

  • 对于企业来说,在已有YARN集群的前提下在单独准备SparkStandAlone集群,对资源的利用就不高。所以,在企业中,多数场景下,会将spark运行到YARN集群中,

  • YARN本身是一个资源调度框架,负责对运行在内部的计算框架进行资源调度管理,作为典型的计算框架,Spark本身也是直接运行在YARN中,并接受YARN的调度的,

  • 对于sparkOnYARN,无需部署Spark集群,只要找一台服务器,充当spark的客户端,即可提交任务到YARN集群中运行

  • Saprk On Yarn 的本质

    • Master角色由YARN的ResourceManager担任
    • Worker角色由YARN的NodeManager担任
    • Driver角色运行在YARN容器内或提交任务的客户端进程
    • 真正干活的Executor运行在YARN提供的容器内

Cluster和Client部署模式

SparkOnYARN是有两种运行模式的,一种是Cluster模式一种是Client模式,

这两种模式的区别就是Driver运行的位置:

  • Cluster模式即:Driver运行在YARN容器内部,和ApplicationMaster在同一个容器内
  • Client模式即:Driver运行在客户端进程中,比如Driver运行在spark-submit程序的进程中
  • ApplicationMaster 是 YARN中的核心概念,任何要在 YARN 上启动的作业类型(包括MR和 Spark)都必须有一个ApplicationMaster。
  • 每种计算框架如果想要在YARN上执行自己的计算应用,那么就必须自己实现和提供一个 ApplicationMaster相当于自己实现YARN提供的接口去实现。

Client部署模式

Cluster部署模式

Cluster和Client对比

Driver运行位置 提供支撑 日志查看 生产问题 资源管理
Cluster模式 YARN容器内 日志输出至容器内,查看不便 推荐 稳定
Client模式 客户端进程内 日志输出至客户端,便于详细出错追踪 不推荐 增大客户端进程复杂度,受到客户端进程稳定性的限制

下面整理了有关 Spark 中 Client 模式和 Cluster 模式的关键信息,特别强调了 Driver 程序的运行位置以及这对性能和稳定性的影响:

Client 模式

  • 应用场景:主要适用于学习和测试环境。虽然在生产环境中也可使用,但一般不推荐,因为其性能和稳定性相对较低。
  • Driver 运行位置:Driver 程序运行在客户端(Client)上。
  • 通信成本:由于 Driver 位于客户端外部,与集群的通信成本较高。
  • 结果显示:Driver 的输出结果直接在客户端显示,便于调试和错误追踪。

Cluster 模式

  • 应用场景:推荐在生产环境中使用此模式,因为它更加稳定且性能优化。
  • Driver 运行位置:Driver 程序运行在 YARN 集群中的一个节点上,通常是 ApplicationMaster。
  • 通信成本:Driver 与集群的通信成本较低,因为它运行在集群内部。
  • 结果显示:Driver 的输出结果不能在客户端直接显示。
  • 管理与监控:Driver(ApplicationMaster)由 YARN 管理,如果遇到问题,YARN 能够自动重启 ApplicationMaster,从而提高应用的可用性和容错能力。