Spark Streaming事务处理彻底掌握

感谢DT大数据梦工厂支持提供以下内容,DT大数据梦工厂专注于Spark发行版定制。

内容概括:

1Exactly once

2 输出不重复

1 正如银行转账业务一样,如果你给一个朋友转账一次,银行的系统必须保证此次的转账数据有且只能处理一次,不能出现另外的情况。事务的意思就是保证数据有且只能处理一次。

而Spark Streaming流处理在事务处理方面也是做得非常好的,并且这一部分内容也是非常重要的。

所谓一图胜千言,我们就来画一张图吧。

整个数据在Driver和Executor上的分布如下


总体上讲是:Driver存储数据元数据信息,Executor上存储具体的数据。

Executor上存储具体的数据的具体过程如下图所示

Executor 通过BlockManager写入内存+磁盘通过WAL来保证数据的安全性 (Receiver)需要注意的是:WAL仍然不能100%保证数据的安全性。当log没有积累到阈值的时候如果崩溃。

这是接收数据的角度来理解,当然Spark Streaming能工作起来,核心还是SparkContext。

Spark Streaming简单的说就俩点:一是接收数据 而是作业执行。

从数据恢复的角度来看。Spark StreamingContext可以通过checkpoint的文件系统中将元数据读进来,从而恢复数据。再通过SparkContext将作业提交给集群。

接下来在以上的基础上我们再来谈谈数据一致性的事务问题。

尽管如此,数据还是有可能会数据丢失,或者数据重复处理。那么我们应该怎么办呢?

第一点:在Receiver收到数据且通过Driver调度,Executor开始计算数据时,Driver突然崩溃。将会导致Executor被kill掉,数据就会丢失,此时务必通过WAL的方式写入HDFS进行备份来保证数据安全性。(丢失的数据可以通过WAL恢复过来)

对于数据有且只被处理一次。当数据被处理后,updataOffsets执行之前如果程序突然崩溃了,就还没来得及更新offsets就很有可能导致数据重复处理(此时可以通过程序判断元数据有没有处理过,如果没有就会导致数据重复处理)

当Receiver崩溃后重新启动就会通过管理Kafka的zookeeper中的元数据再次重复读取数据,但是此时的SparkStreaming认为是成功,但是kafka认为是失败的(因为没有成功执行updateOffsets)就会重复处理消费数据。

整个过程美中不足的是:性能会极大的损失

1 通过WAL的方式会极大的损失Spark Streaming中REeceiver接收数据的性能,因为要花时间先写Log,然后再写入数据。

2 如果通过kafka作为数据来源的话,kafka中有数据备份,然后通过Receiver接收数据的时候又会有副本(为数据安全性而存在的持久化备份),这个时候其实是对资源的极大的浪费。

十分幸运的是:spark 1.3的时候为解决这个性能的问题,支持了Kafka Direct API ,把kafka作为文件存储系统!!!!

减少了数据重复多余备份,又避免了WAL损耗Receiver的问题。

kafka即作为文件存储系统,又作为一个文件流,此时兼具有文件流的优势和文件系统的优势,至此之后,SparkStreaming加上Kafka就成为了相对非常完美的流处理最佳组合。

所有的Executor通过Kafka Direcit API直接消费读取数据。同时也会自己存储管理数据,自己管理自己消费。不会重复消费数据。此时就完美的解决了数据一定会处理,并且只会被处理一次。

二 关于数据输出多次重写及解决方案

关于引起此问题的原因有以下几点

1  task重试

2  job重试

3 stage重试

4 慢任务推测执行

具体的解决办法是设置总共执行次数为1

1 设置spark.task.maxFailures次数为1

2 设置 spark.speculation为关闭状态,不推测执行(关闭后可以提高任务执行的效率)(少了一个步骤嘛!!!!)

3 spark streaming on kafka的话,job失败后可以设置auto.offset.reset为largest的方式。

最后再次强调:可以通过transform和foreachRDD对RDD基于业务逻辑代码进行逻辑控制来实现数据不重复消费和输出不重复。后续会具体的代码实现。敬请有兴趣的朋友们关注动态。

详细信息请查看

联系邮箱18610086859@126.com

电话:18610086859

QQ:1740415547

微信号:18610086859

整个数据设置在Driver和Executor上的分

spark发行版笔记4Spark Streaming事务处理彻底掌握的更多相关文章

  1. spark发行版笔记10

    感谢DT大数据梦工厂支持提供技术支持,DT大数据梦工厂专注于Spark发行版定制. 本期概览: 数据接收全生命周期的思考 大数据处理框架中,最重要的就是性能,性能是排在前面的.其次再考虑其他的.因为数 ...

  2. spark发行版笔记9

    感谢DT大数据梦工厂支持提供技术支持,DT大数据梦工厂专注于Spark发行版定制. 本期概览: 1 Receiver生命全周期 首先,我们找到数据来源的入口,入口如下 Receiver的设计是极其巧妙 ...

  3. spark发行版笔记11

    本期概览: ReceiverTracker架构设计 消息循环系统 ReceiverTracker具体的实现 Spark Streaming作为Spark Core基础 架构之上的一个应用程序,其中的R ...

  4. spark发行版笔记13

    本期概览: ReceiverTracker架构设计 消息循环系统 ReceiverTracker具体的实现 Spark Streaming作为Spark Core基础 架构之上的一个应用程序,其中的R ...

  5. Spark Streaming事务处理彻底掌握

    本篇文章主要从二个方面展开: 一.Exactly Once 二.输出不重复 事务: 银行转帐为例,A用户转账给B用户,B用户可能收到多笔钱,如何保证事务的一致性,也就是说事务输出,能够输出且只会输出一 ...

  6. 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL

    周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...

  7. Dream_Spark-----Spark 定制版:004~Spark Streaming事务处理彻底掌握

    Spark 定制版:004~Spark Streaming事务处理彻底掌握 本讲内容: a. Exactly Once b. 输出不重复 注:本讲内容基于Spark 1.6.1版本(在2016年5月来 ...

  8. 2016年如何选择 Linux 发行版

    不管是在企业级应用还是在消费者领域,2015 对于 Linux 来说都是极其重要的一年.作为一个从 2005 年就开始使用 Linux 的老用户,我有幸见证了 Linux 过去这 10 年里的重大发展 ...

  9. 一款国内好用的Linux发行版?Deepin(深度)Linux

    一款国内好用的Linux发行版?Deepin(深度)Linux 目前来说,要将Linux作为桌面解决方案,对于大多数PC用户来说,当然是不现实的,毕竟Linux的主力用户群体依然是少数极客用户.说白了 ...

随机推荐

  1. 【Qt学习笔记】窗口部件整理

    关于Qt中窗口部件的学习 今天开始学习Qt的窗口部件,领略一下Qt的神奇之处,记得2012年的那年冬天,我还学Java呢,现在基本上和Java说再见了,不过对于嵌入式的开发Qt还是举足轻重的,我想趁着 ...

  2. webdriver杀死浏览器和Chromedriver进程

    /**     * 执行dos命令     * @param command     */    public static void command(String command) {       ...

  3. mybatis 细粒度控制二级缓存

    本文要解决的问题:细粒度控制mybatis的二级缓存.mybatis的二级缓存的问题:当更新SQL执行时只清除当前SQL所在命名空间(namespace)的缓存.如果存在2个命名空间namespace ...

  4. 我要谈对象之——JavaScript面向对象(1)

    任何语言里都有面向对象,除了个别的.今天,我要说的是javascript中面向对象. 什么是面向对象? 计算机中的一切算法和逻辑都是源于生活中的,对象,这个抽象的概念并不是男同胞理解的妹子哈,对象,无 ...

  5. win7的HOST文件夹具体位置

    win7的HOST文件位置为C:\WINDOWS\system32\drivers\etc\文件夹下,快捷查看方法如下: 1.按win+r,输入C:\WINDOWS\system32\drivers\ ...

  6. Eclipse不显示项目栏

    Window>show view>package或者Window>show view>Other...  在弹出的对话框中搜索"Package".

  7. hdu 4585 Shaolin treap

    Shaolin Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Problem ...

  8. VS.Net 2015 Update3 学习(1) 支持Webpack

    让vs.net 编译的时候自动执行webpack 首先 管理员模式下打开 “Developer Command Prompt for VS2015", 是管理员模式啊! 然后进入 cd c: ...

  9. (原创)vim配色------水果色,不伤眼。

  10. MySQL中的两种临时表

    MySQL中的两种临时表 伯乐在线2016-07-06 05:16:52阅读(4556)评论(3) 声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场.举报 ...