Spark Streaming揭秘 Day13

数据安全容错(Driver篇)

书接上回,首先我们要考虑的是在Driver层面,有哪些东西需要维持状态,只有在需要维持状态的情况下才需要容错,总的来说,一共有三个组件需要容错:

  • 数据层面:ReceiverBlockTracker,专门负责管理整个SparkStreaming运行数据的元数据,主要用来跟踪数据,需要状态。
  • 逻辑层面:DStream和DStreamGraph,表达依赖关系,在恢复的时候需要恢复计算逻辑级别的依赖关系。
  • 作业生成层面:JobGenerator,表明正在怎么基于RBT和DStreams的关系生成作业,消费了哪些数据,进行到了哪些程度,都需要容错。

在Driver层面,主要也是采用checkpoint和WAL两个容错机制。

ReceiverBlockTracker容错

ReceiverBlockTracker,会管理SparkStreaming运行过程中的所有数据,指针指向具体数据。所有操作都会保存在WAL中,所以当失败后可以恢复。

在ReceiverBlockTracker中,核心是如下的两个数据结构:

  • 未分配队列streamIdToUnallocatedBlockQueues:存储所有已接收但是还没有分配给具体Batch的Block,会被具体Receiver调用。
  • 已分配队列timeToAllocatedBlocks:表示已分配的Block,会被JobGenerator调用。需要注意的是,这是个HashMap,所以可以存很多Batch Duration的Blocks,可以支持window或者state操作。

所以,我们可以围绕数据的三个阶段展开:

阶段一:addBlock方法主要负责收集数据写入未分配队列

我们可以看到,当收到Executor端传过来的数据,第一步通过writeToLog方法进行元数据的容错处理。需要注意,在这里并没有判断啥调用条件,具体的容错方式是在writeToLog方法内部判断的。

阶段二:allocateBlocksToBatch方法主要负责将未分配队列数据写入已分配队列

在获取所有未分配数据的时候,采用dequeue方法,其中隐含的会进行一个union操作,按照streamID(表示不同的输入数据来源)进行汇总。
同时,在获取数据后,首先做writeToLog,在成功写入WAL之后,才会把元数据放入已分配队列中。

阶段三:CleanUpOldBatchs将过期数据进行销毁

我们可以看到,在实际执行销毁前,也会调用writeToLog进行灾备。

综上所述,在数据管理层面,数据生成、消费、销毁的时候都做灾备!!!

writeToLog

这是进行容错的核心方法,方法本身也是比较简洁的。

首先,会通过isWriteAheadLogEnabled方法进行备份方式在判断,我们发现,其最终是调用了如下的方法。可以看到其核心就是使用到了checkpoint目录,也就是说备份其实是基于checkpoint机制进行的。

实际备份其实就是以WAL的方法进行文件写入,writeToLog目前程序出错时可以recover,但是程序升级时不行,可以通过覆写代码,将WAL保存在其他的地方。

总结来说,checkpoint提供了数据的存放位置,而WAL则是具体的数据组织方法。

欲知后事如何,且听下回分解

DT大数据每天晚上20:00YY频道现场授课频道68917580

Spark Streaming揭秘 Day13 数据安全容错(Driver篇)的更多相关文章

  1. Spark Streaming揭秘 Day12 数据安全容错(Executor篇)

    Spark Streaming揭秘 Day12 数据安全容错(Executor篇) 今天,让我们研究下SparkStreaming在Executor端的数据安全及容错机制. 在SparkStreami ...

  2. Spark Streaming揭秘 Day35 Spark core思考

    Spark Streaming揭秘 Day35 Spark core思考 Spark上的子框架,都是后来加上去的.都是在Spark core上完成的,所有框架一切的实现最终还是由Spark core来 ...

  3. Spark Streaming揭秘 Day32 WAL框架及实现

    Spark Streaming揭秘 Day32 WAL框架及实现 今天会聚焦于SparkStreaming中非常重要的数据安全机制WAL(预写日志). 设计要点 从本质点说,WAL框架是一个存储系统, ...

  4. Spark Streaming揭秘 Day4-事务一致性(Exactly one)

    Spark Streaming揭秘 Day4 事务一致性Exactly one 引子 对于业务处理系统,事务的一致性非常的关键,事务一致性(Exactly one),简单来说,就是输入数据一定会被处理 ...

  5. Spark Streaming揭秘 Day3-运行基石(JobScheduler)大揭秘

    Spark Streaming揭秘 Day3 运行基石(JobScheduler)大揭秘 引子 作为一个非常强大框架,Spark Streaming兼具了流处理和批处理的特点.还记得第一天的谜团么,众 ...

  6. Spark Streaming揭秘 Day33 checkpoint的使用

    Spark Streaming揭秘 Day33 checkpoint的使用 今天谈下sparkstreaming中,另外一个至关重要的内容Checkpoint. 首先,我们会看下checkpoint的 ...

  7. Spark Streaming揭秘 Day29 深入理解Spark2.x中的Structured Streaming

    Spark Streaming揭秘 Day29 深入理解Spark2.x中的Structured Streaming 在Spark2.x中,Spark Streaming获得了比较全面的升级,称为St ...

  8. Spark Streaming揭秘 Day28 在集成开发环境中详解Spark Streaming的运行日志内幕

    Spark Streaming揭秘 Day28 在集成开发环境中详解Spark Streaming的运行日志内幕 今天会逐行解析一下SparkStreaming运行的日志,运行的是WordCountO ...

  9. Spark Streaming揭秘 Day24 Transformation和action图解

    Spark Streaming揭秘 Day24 Transformation和action图解 今天我们进入SparkStreaming的数据处理,谈一下两个重要的操作Transfromation和a ...

随机推荐

  1. Linux 学习笔记 更多的bash shell命令

    一  监测程序 1.ps 输出运行在系统上的所有程序的许多信息 运行ps命令,也会开启一个进程 默认情况下,ps命令只会显示运行在当前控制台下的属于当前用户的进程. Unix风格的参数(单破折号) - ...

  2. Object-c中的属性和成员变量的关系详解

    很多人在初学移动开发的时候会对object-c中的合成存取方法感到疑惑,此处尝试为看到本文有缘人答疑解惑,鄙人才疏学浅,难免有疏漏谬误之处,热烈欢迎诸位看官拍砖指点. 1.合成存取方法: OC为增加开 ...

  3. Header 与 Footer 的 DIV 高度固定, 中间内容 DIV高度自适应,内容不满一页时,默认填满屏幕。

    一.需求: 页面布局分三大块: Header Body Footer 1.内容不满一页时,Footer 在屏幕最底部,Body 填充满 Header 与 Footer 中间的部分. 2.当缩小浏览器时 ...

  4. Java作业代写

    作业一 试用java编写一个九九乘法表并打印. 作业二: 设计两个人类与书类,并设置两者的关系,试用人去找书,书去找人,假如某人有一个儿子,它也有一本书,试用儿子去找书,书找儿子. 大作业 熟悉QQ农 ...

  5. C中的回调函数

    C语言中应用回调函数的地方非常多,如Nginx中: struct ngx_command_s { ngx_str_t name; ngx_uint_t type; char *(*set)(ngx_c ...

  6. ResponseBody的使用

    使用Spring的@ResponseBody有时还是挺方便的,在ajax调用返回纯字符串时有中文编码问题. @ResponseBody @RequestMapping(value="/dec ...

  7. Adobe Edge Animate --使用HTML5实现手机摇一摇功能

    Adobe Edge Animate --使用HTML5实现手机摇一摇功能 版权声明: 本文版权属于 北京联友天下科技发展有限公司. 转载的时候请注明版权和原文地址. HTML5的发展日新月异,其功能 ...

  8. 纯css 写三角形

    <div style="width: 0;height: 0;border-left: 6px solid transparent;border-right: 6px solid tr ...

  9. 移植FastBlur模糊算法至SDL

    FastBlur是Android标配的模糊算法,这也在当时引起了一股毛玻璃热潮.IOS7就采用了此算法(这有抄袭Android之嫌,因为Android1.5就在标库中加入了此函数).算法效率很高,这也 ...

  10. [Bootstrap]全局样式(二)

    具体排版 1.标题和标题类 <h1> ~<h6>和.h1~h6|副标题<small>和.small font-size                    mar ...