spark源码之standalone模式下master持久化引擎讲解_第1页
spark源码之standalone模式下master持久化引擎讲解_第2页
spark源码之standalone模式下master持久化引擎讲解_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Spark 源码之 Standalone 模式下 master 持久化引擎讲解Standalone 模式下 Master 为了保证故障恢复,会持久化一些重要的数据,来避免 master故障导致集群不可用这种情况(也即单点故障)。目前,有四种持久化策略: 1,基于 zookeeper 的持久化引擎。2,基于文件的持久化引擎。3,用户自定义持久化引擎。4,不使用持久化引擎。在 master 的 OnStart 方法中,对应的源码如下:val serializer =new JavaSerializer(conf)val (persistenceEngine_, leaderElectionAgen

2、t_) = RECOVERY_MODE matchcase ZOOKEEPER =logInfo(Persisting recovery sval zkFactory =e to ZooKeeper)new ZooKeeperRecoveryModeFactory(conf, serializer)(zkFactory.createPersistenceEngine(),zkFactory.creaeaderElectionAgent(this)case FILESYSTEM =val fsFactory =new FileSystemRecoveryModeFactory(conf, ser

3、ializer) (fsFactory.createPersistenceEngine(),fsFactory.creaeaderElectionAgent(this) case CUSTOM =val clazz = Utils.classForName(conf.get(spark.deploy.recoveryMode.factory) val factory = clazz.getConstructor(classOfSparkConf, classOfSerializer).newInstance(conf, serializer).asInstanceOfStandaloneRec

4、overyModeFactory(factory.createPersistenceEngine(), factory.creacase _ =eaderElectionAgent(this)(new BlackHolePersistenceEngine(), new MonarchyLeaderAgent(this)persistenceEngine = persistenceEngine_leaderElectionAgent = leaderElectionAgent_默认,情况下是无持久化引擎,也就是没有 ha 策略。Spark 提供的可用的 ha 策略:基于文件系统的和基于 zook

5、eeper。配置方法如下:基于文件系统:基于 zookeeper:生产环境中可用的是基于 zookeeper 的持久化引擎。propertyMeaningspark.deploy.recoveryModeZOOKEEPERspark.deploy.zookeeper.urle.g., 192.168.1.100:2181,192.168.1.101:2181spark.deploy.zookeeper.dirzookeeper 保存恢复状态的目录propertyMeaningspark.deploy.recoveryModeFILESYSTEMspark.deploy.recoveryDire

6、ctory用来恢复状态的目录基于 zookeeper 持久化策略,会允许最终是一个 leader,其余是 standby。同时运行多个 master,然后支持 leader,Spark 的 Master 的 leader实现Spark 源码里面使用的是 CuratorFramework,跟 zookeeper 交流。该框架有以下特点:1,自动连接管理:自动处理 zookeeper 的连接和重试存在一些潜在;可以 watchNodeDhanged event 和获取 updateServerList;Watches 可以自动被 Cruator recipes 删除;2,更加简洁的 API:简化

7、raw zookeeper 方法,事件等;提供现代流式 API 接口3,Recipe 实现:leader,分布式锁,path 缓存,和 watcher,分布式队列,Barriers等。Spark 源码里面使用了 LeaderLatch 实现点类型来做,zookeeper 有四种节点类型:1,持久节点(PERSISTENT)功能。这个实现实际是基于 zookeeper 的节节点创建后,会一直存在,不会因客户端会话失效而删除;2,持久顺序节点(PERSISTENT_SEQUENTIAL)基本特性与持久节点一致,创建节点的过程中,zookeeper 会在其名字后自动追加一个单调增长的数字后缀,作为新

8、的节点名;3,临时节点(EPHEMERAL)客户端会话失效或连接关闭后,该节点会被自动删除,且不能再临时节点下面创建子节点。4,临时顺序节点(EPHEMERAL_SEQUENTIAL)基本特性与临时节点一致,创建节点的过程中,zookeeper 会在其名字后自动追加一个单调增长的数字后缀,作为新的节点名;LeaderLatch 实现 leader实际上基于临时顺序节点来做的。Spark 源码里面基于 zookeeper 的 leader在 master 的 OnStart 方法里面具体实现过程源码如下:实际是在构建 zookeeper 的持久化引擎的时候,构建的在 creaeaderElect

9、ionAgent 方法里面构建了new ZooKeeperLeaderElectionAgent(master, conf) 该对象,继承了 LeaderLatchListener,并且覆盖了 notLeader 和 isLeader 两个重要的方法具体。在 ZooKeeperLeaderElectionAgent 构建的时候调用了自己的 start 方法,该方法构建了LeaderLatch,并添加 ZooKeeperLeaderElectionAgent 作为其 listener。Leader在 zookeeper 的临时节点的路径为private def start() logInfo(S

10、tarting ZooKeeper LeaderElection agent)zk = SparkCuratorUtil.newnt(conf) leaderLatch = new LeaderLatch(zk, WORKING_DIR) leaderLatch.addListener(this) leaderLatch.start()(zkFactory.createPersistenceEngine(), zkFactory.creaeaderElectionAgent(this)leaderElectionAgent =leaderElectionAgent_浪尖技术224209501执

11、行 ZooKeeperLeaderElectionAgent 对象的 start 方法之后,每当该对象所在的 master由 standby 变为 Leader 的时候,会调用 isLeader()方法。由 Leader 变为 StandBy 的时候会调用 notLeader()。就可以在这两个方法里实现自己要的状态切换的相关操作。要实现,自己应用的 ha,也可基于此方法。浪尖技术224209501override def isLeader() synchronized / could have lost leadership by now. if (!leaderLatch.hasLeadership) returnlogInfo(We have gained leadership) updaeadershipSus(true)override def notLeader() synchronized / could have gained leadership b

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论