第29课:Master HA彻底解密

本課主題

  • Master HA 解析
  • Master HA 解析源码分享

Master HA 解析

  1. 生產環境下一般採用 ZooKeeper 做 HA,且建義為 3台 Master, ZooKeeper 會自動管理 Master 的切換
  2. 採用 ZooKeeper 做 HA 的時候,ZooKeeper 會負責保存整個 Spark 集群運行的元數據:所有 Worker 的信息, 所有 Driver 的信息, 應用程序的信息 和 所有Executor 的信息
  3. ZooKeeper 遇到當前 Active 級別的 Master 出現故障的時候從 Standby Masters 中選取出一台作為 Active , 但是要注意,被選舉後到成為真正的Active Master 之間需要從 ZooKeeper 中獲取集群當前運行狀態的元數據信息並進行恢復;
  4. 在 Master 切換的過程中,所有已經在運行的程序皆正常運行!因為 Spark Application 在運行前就已經通過 Cluster Manager 獲得了計算資源 所以在運行時 Job 本身的調度和處理和 Master 是沒有任何關係的!
  5. 在 Master 的切換過程中唯一的影響是不能提交新的 Job: 一方面不能提交新的應用程序給集群,因為只有 Active Master 才能接受新的程序的提交請求;另外一方面,已經運行的程序也不能夠因為 Action 操作觸發新的 Job 的提交請求。

Spark Master HA on ZooKeeper 切換流程圖

Master HA 的四大方式

  1. Master HA 的四大方式:分別是 ZOOKEEPER,FILESYSTEM, CUSTOM, NONE;
  2. 需要說明的是:
    • ZOOKEEPER 是自動管理 Master;
    • FILESYSTEM 的方式在 Master 出現突障後需要手動啟動機器,機器啟動後會立即成為 Active 級別的 Master 來對外提供服務(接受應用程序提交的請求、接受新的 Job 運行的請求)
    • CUSTOM 的方式允許用戶自定義 Master HA 的實現,這對於高級用戶特別有用;
    • NONE,這是默應情況,當我們下载安裝了 Spark 集群中就是採用這種方式,該方式不會持久化集群的數據, Driver, Application, Worker and Executor. Master 啟動起立即管理集群;


  3. Persistence Engine 中有一個至關重要的方法 persists 來實現數據持久化

    readPersistedData 來獲取恢復集群中的元數據

    現在去看看它的createdLeaderElectionAgent的方法

  4. FILESYSTEM 和 NONE 的方式均是採用 MonarchyLeaderAgent 的方式來完成 Leader的選舉的,其實際實現是直接把傳入的 Master 作為 Leader

  5. NONE 的方式根本不需要持久化引擎,它為什麼要搞一個BlackHoleEngine
  6. 对一些WorkerState状态为 UNKNOWN 的话(Worker不响应),就把它删除掉,如果你是以集群方式运行的话,driver 失败话可以重新启动一下,最后把状态变回 ALIVE,这里注意要加入--supervise这一个参数。

參考資料

资料来源来至 DT大数据梦工厂 第29课:Master HA彻底解密

时间: 2024-10-04 16:47:58

第29课:Master HA彻底解密的相关文章

Master HA彻底解密(DT大数据梦工厂)

内容: 1.Master HA解析: 2.Master HA的四种方式: 3.Master HA的内部工作机制: 4.Master HA的源码解密: 本讲主要源码角度分析Master HA,因为在生产环境必然要做的 ==========Master HA解析============ Spark是Master-Slave的结构 现在业界是1个Master Active,2个以上standby 如果有HA的话,切换active的时候,会在上次运行的基础上继续运行 Drvier提交程序.申请资源,是跟

Spark3000门徒第12课Spark HA实战总结

今晚听了王家林老师的第12课Spark HA实战,课堂笔记以及作业如下: Spark HA需要安装zookeeper,推荐稳定版3.4.6. 1.下载zookeeper3.4.6,2.配置环境变量3.创建data logs4.vi conf/zoo.cfg5 data目录中创建myid spark-env.sh 配置HA : export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zo

Spark3000门徒第13课Spark内核架构解密总结

昨晚听了王家林老师的第13课Spark内核架构解密,课堂笔记如下: executor中线程池并发执行和复用,Spark executor, backed by a threadpool to run tasks. 默认一个work为一个Application只开启一个executor.一个worker里executor是多点好还是少点好,看具 体情况. Worker:管理当前Node机器资源,并接受Master的指令来分配具体的计算资源Executor(使用ExecutorRunner 在新的进

[Spark內核] 第41课:Checkpoint彻底解密:Checkpoint的运行原理和源码实现彻底详解

本课主题 Checkpoint 运行原理图 Checkpoint 源码解析 引言 Checkpoint 到底是什么和需要用 Checkpoint 解决什么问题: Spark 在生产环境下经常会面临 Transformation 的 RDD 非常多(例如一个Job 中包含1万个RDD) 或者是具体的 Transformation 产生的 RDD 本身计算特别复杂和耗时(例如计算时常超过1个小时) , 可能业务比较复杂,此时我们必需考虑对计算结果的持久化. Spark 是擅长多步骤迭代,同时擅长基于

第12课:HA下的Spark集群工作机制解密

Spark HA需要先安装zookeeper,推荐稳定版zookeeper-3.4.6,具体安装如下: 1) 下载Zookeeper 进入http://www.apache.org/dyn/closer.cgi/zookeeper/,你可以选择其他镜像网址去下载,用官网推荐的镜像:http://mirror.bit.edu.cn/apache/zookeeper/ 下载zookeeper-3.4.6.tar.gz.  2) 安装Zookeeper 提示:下面的步骤发生在master服务器. 以u

MariaDB数据库介绍三、MHA(Master HA)实现主节点故障转移

一.MHA MHA是开源的MySQL的高可用程序,它为MySQL的主从复制架构提供了主节点故障自动转移的功能,它会监控master节点故障的时候,会提升其中的拥有最新数据的slave节点称为新的master节点,同时它还提供了master节点的在线切换的功能,按需切换master/slave节点. MHA服务有两种角色,MHA Manager和MHA Node: MHA Manager(管理节点):单独部署在一台独立机器上管理多个master/slave主从复制集群, 每个master/slav

第29课 循环链表的实现

1. 什么是循环链表 (1)概念上 ①任意数据元素都有一个前驱和一个后继 ②所有的数据元素的关系构成一个逻辑上的环 (2)实现上 ①循环链表是一种特殊的单链表 ②尾结点的指针域保存了首结点的地址 2. 循环链表的实现思路 (1)通过模板定义CircleList类,继承自LinkList类 (2)定义内部函数makeCircle(),用于将单链表首尾相连 (3)特殊处理:首元素的插入操作和删除操作 ①插入位置为0时:头结点和尾结点均指向新结点:新结点成为首结点. ②删除位置为0时:头结点和尾结点指

第14课:Spark RDD解密

以下为Spark RDD解密课程学习心得: 在介绍Spark RDD之前,先简单的说下Hadoop MapReduce,它是基于数据流的方式进行计算,从物理存储上加载数据,然后操作数据, 最后写入到物理存储设备上,这样的模式会产生大量的中间结果. MapReduce不适合场景:1.不适合大量迭代计算场景,2.交互式查询(重点是:基于数据流的方式不能复用中间的计算结果) 而Spark RDD是基于工作集的方式,RDD名称叫:弹性式分布式数据集. RDD的弹性式主要分为以下几点:        1.

第29课 类中的函数重载

函数重载回顾: 类中的重载: 万变不离其宗: 类中的普通成员函数和静态成员函数也够成重载. 示例程序: 1 #include <stdio.h> 2 3 class Test 4 { 5 int i; 6 public: 7 Test() 8 { 9 printf("Test::Test()\n"); 10 this->i = 0; 11 } 12 13 Test(int i) 14 { 15 printf("Test::Test(int i)\n"