本期内容 :

  • Executor的WAL
  • 消息重放

数据安全的角度来考虑整个Spark Streaming :

  1、 Spark Streaming会不断次序的接收数据并不断的产生Job ,不断的提交Job到集群运行,至关重要的问题接收数据安全性

  2、 由于Spark Streaming是基于Spark Core基础之上的,即是说运行过程中出现错误或者故障,Spark Streaming也可以借助

  Spark Core中RDD的容错的能力自动的进行恢复,恢复的前提是数据的安全可靠。

    所以Executor接收数据时的安全容错至关重要,在这个数据的安全容错的基础之上进行调度级别的容错基本靠Spark Core,

  对于Executor的安全容错主要是数据的安全容错,计算的时候Spark Streaming是借助于Spark Core上的RDD的容错。

数据的安全容错:

  1、 最天然的安全容错是副本,处理数据的时候先复制一个副本

  2、接收数据时不使用副本,数据源支持重放,可以反复读取数据,如读取过去10S中的数据,出现错误可以再次读取过去10S中的数据

  

一、 Executor的WAL

    Spark Core的BlockManager负责具体Executor上的数据读写操作,并且也是个MsteaStorageLevel的结构

  借助Spark底层的存储系统BlockManager做备份的StorageLevel 。

  

  

  

  

  

  1、BlockManagerBasedBlockHandler 副本机制

    

    

    

    

  2、 WriteAheadLogBasedBlockHandler WAL日志方式

    在其具体目录下会做一份日志,后续处理过程中出现问题可以基于日志恢复,日志需要写在目录下:

    需要先设置写在CheckPoint的目录,目录可以有很多目录: StreamingContext.CheckPoint 在上下文中指定具体目录,

    一般情况下会放在HDFS中,优势是安全,多份副本,缺点是影响性能,浪费存储空间 。

    

    

    

   同时在WAL及BlockManager中放数据:

    

    

    

    

    

  Executor写数据时是按照顺序的写,由于是做WAL使用不会修改数据,一般是根据索引读取,不需要全盘搜索所以读取速度非常快。

    

   

  3. 具体的实现 :管理具体的WAL文件,周期性的写文件,输出时写文件,清理旧文件

    

    

    

    

    

  

  备份存储总结 :

    1、 基于BlockManager ,比如说两台机器中都有数据,其中一台出错了就切换到另外一台

    2、 WAL方式,WAL方式比较耗时,假如你对性能要求非常苛刻的话WAL一般不是一个很好的选择,如果你能够容忍1分钟以上的延迟的话WAL往往比较安全

    注意: 如果还没有来得及进行WAL的话数据可能也会丢失。

  

二、 支持消息重放 :

  主要基于Kafka,天然就是有副本与容错的,已经作为一个存储系统了。

  Kafka有Receiver的方式,Direct的方式 :

  1、Receiver方式:是交给zookeeper管理的Mtdata的偏移量的如果失效后Kafka会基于Offset重新的读取,如果你读取失败此时不会给zookeeper发送ACK信号,

  zookeeper就让我你并没有消费这个数据,这个是zookeeper保证的,还有个数据重复消费的问题,就是消费完了但是还没有来得及给zookeeper进行同步,可能会重复。

  2、Direct方式:直接去操作Kafka ,而且是自己管理Offset ,Kafka本身就有Offset ,这种方式可以确保有且一次的操作处理,这个需要进行CheckPoint操作,较耗时间。

    

  管理这个Offset ,Bach会调用这个方法,上次的Offset减去这次的值就可以确定此次Offset的范围数据。

    

Spark Streaming源码解读之Executor容错安全性的更多相关文章

  1. 第12课:Spark Streaming源码解读之Executor容错安全性

    一.Spark Streaming 数据安全性的考虑: Spark Streaming不断的接收数据,并且不断的产生Job,不断的提交Job给集群运行.所以这就涉及到一个非常重要的问题数据安全性. S ...

  2. Spark Streaming源码解读之Driver容错安全性

    本期内容 : ReceivedBlockTracker容错安全性 DStreamGraph和JobGenerator容错安全性 Driver的安全性主要从Spark Streaming自己运行机制的角 ...

  3. Spark Streaming源码解读之JobScheduler内幕实现和深度思考

    本期内容 : JobScheduler内幕实现 JobScheduler深度思考 JobScheduler 是整个Spark Streaming调度的核心,需要设置多线程,一条用于接收数据不断的循环, ...

  4. Spark Streaming源码解读之流数据不断接收和全生命周期彻底研究和思考

    本节的主要内容: 一.数据接受架构和设计模式 二.接受数据的源码解读 Spark Streaming不断持续的接收数据,具有Receiver的Spark 应用程序的考虑. Receiver和Drive ...

  5. 15、Spark Streaming源码解读之No Receivers彻底思考

    在前几期文章里讲了带Receiver的Spark Streaming 应用的相关源码解读,但是现在开发Spark Streaming的应用越来越多的采用No Receivers(Direct Appr ...

  6. 11.Spark Streaming源码解读之Driver中的ReceiverTracker架构设计以及具体实现彻底研究

    上篇文章详细解析了Receiver不断接收数据的过程,在Receiver接收数据的过程中会将数据的元信息发送给ReceiverTracker:   本文将详细解析ReceiverTracker的的架构 ...

  7. 16.Spark Streaming源码解读之数据清理机制解析

    原创文章,转载请注明:转载自 听风居士博客(http://www.cnblogs.com/zhouyf/) 本期内容: 一.Spark Streaming 数据清理总览 二.Spark Streami ...

  8. Spark Streaming源码解读之流数据不断接收全生命周期彻底研究和思考

    本期内容 : 数据接收架构设计模式 数据接收源码彻底研究 一.Spark Streaming数据接收设计模式   Spark Streaming接收数据也相似MVC架构: 1. Mode相当于Rece ...

  9. Spark Streaming源码解读之Receiver生成全生命周期彻底研究和思考

    本期内容 : Receiver启动的方式设想 Receiver启动源码彻底分析 多个输入源输入启动,Receiver启动失败,只要我们的集群存在就希望Receiver启动成功,运行过程中基于每个Tea ...

随机推荐

  1. canvas 画字

    用canvas画字还是头一回,要想和UI设计的画的一模一样还是真有些苦难,不过现在实现的效果已经很像了. <!--通过字体文件引入字体--><style>@font-face ...

  2. HDU 5936 Difference

    题意: 有一个函数f(y, k) = y的每个十进制位上的数字的k次幂之和 给x, k 求 有多少个y满足 x = f(y, k) - y 思路: (据说这叫中途相遇法?) 由于 x >= 0 ...

  3. js 浏览器兼容的一些方法

    使用js是一件令人很抓狂的事情,很多的浏览器兼容,一大推的代码,谁的脑袋能记住那么多的东西,只有平时多积累,所谓熟能生巧嘛..这里列出一些常用的兼容代码,一点点积累哈~~~     一.以跨浏览器的方 ...

  4. JSBinding+Bridge.NET:生成绑定(导出)

    将框架代码导出到 JavaScript.就可以在 JavaScript 中调用 框架代码 的功能. 注意,这个功能是在 Js工程中做的,Cs工程没有这回事. 如何导出? 1. 将需要导出的类添加到 J ...

  5. ThinkPHP中的动态缓存(S方法)和快速缓存(F方法)

    系统默认的缓存方式是采用File方式缓存,我们可以在项目配置文件里面定义其他的缓存方式,例如,修改默认的缓存方式为Xcache(当然,你的环境需要支持Xcache)    对于File方式缓存下的缓存 ...

  6. tar 命令详解

    tar命令[root@Linux ~]# tar [-cxtzjvfpPN] 文件与目录 -C 目标目录(注:解压时)参数:-c :建立一个压缩文件的参数指令(create 的意思):-x :解开一个 ...

  7. [PHP] - mysql 数据库操作

    使用PHP操作数据库有两种方式 使用mysql_XXXX()方法 使用这种方式,需要先把php.ini里的extension=php_mysql.dll去掉注释 使用PDO 使用这种试,需要把php. ...

  8. c#读取INI文件

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

  9. SQLServer count函数、cross apply和outer apply、

    1.COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入)2.COUNT(*) 函数返回表中的记录数 select *   from TABLE_1 T1 outer ap ...

  10. LeetCode "477. Total Hamming Distance"

    Fun one.. the punch line of this problem is quite common in Bit related problems on HackerRank - vis ...