资源描述
SPARK&Storm故障恢复机制故障恢复机制1 Storm介绍2 Storm故障恢复3 Spark介绍4 Spark故障恢复主控节点NimbusStorm集群中运行的守护进程,用于分配代码、布置任务及故障检测工作节点SupervisorStorm集群中工作节点运行一个守护进程,用于监听工作,开始并终止工作进程ZookeeperNimbus可通过Zookeeper监控工作节点的情况。Nimbus和Supervisor均为无状态,且状态都存于Zookeeper中。StormNimbus&SupervisorStormTopology它是Storm中的数据源,通过接入外部的数据转为固定格式的流,然后发射出去TopologySpoutBolt消费Spout传入的流,也可以生成新的流发射出去。Bolt可订阅多个Spout和BoltBoltTopology是一个抽象的计算逻辑图。一个Topology包含多个Spout和BoltTopologyStormTuple Tree每个Tuple从Spout或者Bolt发出都会建立一个Tuple TreeStorm会建立Acker Task跟踪Tuple TreeEmit通知Tuple Tree有新的Tuple生成。Ack通知Tuple Tree有Tuple处理完毕若Tuple处理超时会重发重新处理每一个Tuple都会随机产生唯一的64位id,用于异或计算检测Tuple Tree结束TaskTaskTuple TreeTupleStormTopology部署NimbusTopology ATopology BTopology CDeploySupervisor ASpout ASpout BSpout CBolt A1Bolt A2Bolt B1Bolt B2Bolt B3Bolt C1Supervisor BSupervisor CDispatcherTopology发布到Nimbus,由Nimbus将每个Topology分发到多个Supervisor节点中。每个Supervisor运行着多个Topology的子集StormNimbus Supervisor故障恢复ZooKeeper Cluster(store state)Nimbus(daemon processor)Supervisor 1(daemon processor)Zookeeper Node 1Zookeeper Node 2Zookeeper Node 3Zookeeper Node NSupervisor 2(daemon processor)Supervisor 3(daemon processor)Supervisor 4(daemon processor)Nimbus和Supervisor都是后台进程,状态存于ZooKeeper集群中。当Nimbus或Supervisor进程故障,需要类似Monit的工具进行后台进程的监控以及恢复。然后会在ZooKeeper中查询故障前的状态继续运行。整个过程不影响工作节点的运行。StormWorker故障恢复Supervisor1Worker1Worker2Supervisor2Worker3Worker4NimbusSupervisor1Worker1Supervisor2Worker3Worker4NimbusWorker2Supervisor1Worker1Worker2Supervisor2Worker3Worker4NimbusRestartReassignWorker是运行计算逻辑的进程。当Worker进程停止后,Supervisor重启该进程。如果成功则继续在该节点运行。如果重启几次都不成功或者启动后不能向Nimbus发心跳,则Nimbus把该Worker转移到另外的Supervisor节点上运行。OKRestartFailedStormSpout Bolt故障处理Supervisor2Spout1Bolt1Supervisor1Spout1Bolt1NimbusDeploy Failed/Time outReassign当Spout/Bolt部署到Supervisor失败或者超时,Nimbus会将其部署到另外的Supervisor节点中Storm故障恢复策略总结优点缺点Nimbus不影响Supervisor节点及Task运行在恢复完成前,不能部署新的Topology,不能reassign taskSupervisor不影响Nimbus节点及Task运行在恢复完成前,不能在该节点部署新的Task,不能恢复失败的TaskWorker由Supervisor监控,能快速恢复在恢复完成前,不能在该进程部署新的TaskTuple Tree能保证消息被Task处理SparkSpark是一个快速通用的大规模数据处理框架。具有Hadoop的批处理能力,并且速度超出Hadoop两个数量级。同时能与Hadoop进行集成,并且可将Spark用于流处理,机器学习,图像处理等。SparkSpark技术架构RDDMapReduceFunctional ProgramAmazon EC2/Mesos/YARNHDFSKafka/Flume/ZeroMQ/MQTT/Twitter/HDFSSpark由Scala编写,支持函数式编程。支持多种数据源的接入。除了Map/Reduce,Spark还提供了多种函数接口,比如:filter,mapPartitions,groupByKey,first等。RDDResilient Distributed Dataset,Spark将数据分布到多台机器的内存中进行并行计算。Spark的集群需要别的软件进行管理,Spark本身不具备集群管理能力。Spark也支持流式计算,即每一次函数运行返回的结果能继续在内存中进行运算。这是Hadoop不具备的能力。Spark应用部署Spark ApplicationDriver ManagerTask1Task2Task3Task4每个Spark应用包含一个驱动程序和多个Task。驱动程序用来建立SparkContext,包含一些配置和数据源的接入。Task是具体的计算逻辑。部署时驱动程序与集群管理器通讯,由集群管理器部署Task到多个节点中Driver NodeSparkRDD为了提高计算效率,Spark提出了RDD概念,即Resilient Distributed Dataset。把待处理的数据或者已经处理好得到的结果分布到多个节点的内存中去,通过这样达到了并行计算的目的。RDD也有多种持久化级别,可缓存在内存中,可以存储在硬盘中,也可以两者兼有。DataSourceDriverProgramLoad Properties(Parallelize count etc)InputWork Node1TaskRDD1Work Node2TaskRDD2Work Node3TaskRDD3DataStoreSparkTransformations Actions可以由一个已经存在的RDD建立一个新的RDD,常常用于反复的迭代计算或者多阶段流式计算Transformations在计算完一个RDD后,可将计算结果返回给驱动逻辑。如reduce函数ActionsDataSourcemapmapunionunionjoinA:B:C:D:F:E:G:Stage1:Stage2:Stage3:DriverProgramreduceTransformationsActionsSpark与Hadoop对比SparkHadoop性能可缓存中间计算结果,提高了计算速度每次计算完后的结果不能写缓存,继续计算需要重新读取工作量提供Map/Reduce函数,还有其他的函数可直接调用需要自己实现Map/Reduce类,不提供函数可调用数据处理RDD可对数据不断的在内存中迭代计算而非落地后再重新读取再迭代,可多次Map后再Reduce每一次Map后必须有Reduce,并且数据会落地。不适合不间断迭代计算故障处理多主多备,访问HDFS不会有数据丢失,其余数据源有丢失的情况能快速恢复计算节点,少有数据丢失Spark高可用方案Zk Node3Zk Node2Zk Node1Master1Master2Master3Master4Standby modeLeaderDynamicAdd/DelSlaver1Slaver2Slaver3Zookeeper ClusterSpark ClusterRegisterSpark集群可启动多个Master并注册到ZooKeeper集群中,状态存于Zookeeper中。其中一个会被选为Leader,其余的保持Standby模式,当Leader故障,其他的Master会有一个被选为Leader,并从Zookeeper中读取状态恢复。可动态增加或者删除Master节点。SparkDriver Node故障恢复DriverNodeDriverNodeDriverNode(Fails)DriverNode(Recover)HDFSCheckpoint1Write Meta1Checkpoint2Write Meta2Read Meta2t0t1t2t3t4可以设置checkpoint来针对DriverNode中的SparkContext来进行元数据保存。当节点故障恢复后,可从HDFS中读取之前保存的元数据。SparkDriver Node故障恢复若数据源为HDFS,则当Driver Node故障直至恢复,待处理的数据不会丢失。当恢复成功后,即可从HDFS继续读取数据进行处理。SparkDriver Node故障恢复DriverNodeDriverNodeDriverNode(Fails)DriverNode(Recover)ExternalDataSourcet0t1t2t3t4Worker1Worker2Worker1Worker2Worker1Worker2Worker1Worker2Data Lostintermediate state will not be recovered completely如果DriverNode里包含状态值,则该状态值无法恢复SparkWorker Node故障恢复WorkerNodeWorkerNodeWorkerNode(Fails)WorkerNode(Recover)HDFSt0t1t2t3t4Data1Data2Data31.2.3.如果数据源是HDFS,则当worker故障了,数据不会丢失。当节点恢复后,重新读取HDFS中的数据重新进行计算。SparkWorker Node故障恢复WorkerNodeWorkerNodeWorkerNode(Fails)WorkerNode(Recover)ExternalDataSourcet0t1t2t3t4Data1Data2Data3ReplicateAReplicateBReplicateCData4进入Worker的数据都要建立副本,当节点故障时,可从副本里读取数据重新计算,然后继续接收外部数据。如果在节点还没有对数据创建副本前就故障了,则这部分数据将丢失。1.2.
展开阅读全文