spark streaming 流式计算-----容错(hbase幂等性修改)
在做流式计算过程中,最复杂最难做的莫过于数据幂等性修改操作的设计。先解释一下概念【幂等性操作】,幂等性概念来源于数学专业表示对一个表达式做多次相同的操作,表达式不会改变。例如:逻辑回归中的Sigmod函数,n次求导之后依然坚挺。在流式计算中容错设计也要求工程设计有数据幂等性设计,特别针对流式计算中对第三方存储平台的修改操作。以及更加逆天的场景:在一个业务线有多个点有批量的数值修改操作,只要有一个点没有修改完成,而此时流式计算崩溃,下次重启都要做所有点的数据恢复操作。
说到幂等性,不得不说一下spark中的一个优化操作---推测执行。推测执行设计的初衷是提高作业的执行效率,避免某一个任务因为硬件问题卡死而拖慢整个计算任务。大致设计思想时,在任务完成达到某个百分比,开始检查任务完成情况,如果发现某任务执行时间超过其他任务耗时均值的阈值倍数,就在其他节点重启相同的计算任务,这样可以有效避免因硬件问题造成的卡死现象。但是在流式计算中对于修改数值的操作或者在mappartion/foreachPartition中自定义数据持久化到非主键约束的平台时,就会出现灾难性后果。一旦出现数据倾斜,启动备用线程执行当前任务,就会出现数据加倍等脏数据。所以在以上场景,无法保证操作幂等性的前提下,不要开启推测执行。
今天着重分享对于hbase的幂等性修改的设计
因为hbase数据有rowKey这种类似唯一主键的约束,数据覆盖写这种操作很很容易就能实现。即使出现一批数据没有完全写完,出现流式计算崩溃,这种场景也没有问题,下次重启再写一次覆盖就可以了,不会出现脏数据。但是对于修改操作,多个线程并行修改,只要有一个没有完成,系统挂掉,在重启之前需要将上个批次没有修改完成的数据回复到最后一次修改完成的状态。
这个主要设计方案是:
1.在流式计算中设置并持久化 批次号(从0开始,每个批次完成是批次号加一)
2.在写hbase时,除了正常修改的数据外,再写一列附属列用来保存当前批次号和当前批次修改的字段名称
3.优化操作:(每个批次在修改hbase之前,将当前使用批次使用的所有rowkey持久化(hdfs或者kafka=>hdfs(为了尽量减少直接写hdfs影响执行速度)),写成功后删除上次保存的rowkey(如果通过kafka写,rowkey+批次号,删除小于当前批次号的数据)
4. 重启流式计算前,读取最后一次保存的rowkey。按照rowkey到hbase中查询出相关的数据,根据附属列中记录的上一次批次修改的列,将相关的cell用上一个版本(hbase cell默认保存三个版本)的数据覆盖当前的数据。这个操作可以和流式计算分开,也可以和流式计算写到一起
5.然后开始开始启动流式计算(接着从上次保存的offset+1的位置),接着处理数据
————————————————
版权声明:本文为CSDN博主「sunkl_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u010990043/java/article/details/83144345
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
阿里云模板建站怎么样-阿里云自助模板建站系统介绍
使用阿里云建网站的三种方式购买云服务器手动建站、云速成美站模板建站或者选择阿里云定制建站三种方式,站长分享利用阿里云创建网站的三种方式及优势对比: 阿里云建站方法汇总 使用阿里云建站可以有三种方式,一种是购买ECS云服务器,然后自行手动搭建网站,需要技术门槛;第二种方式是购买阿里云官网云速成美站,使用模板建站,阿里云提供上千套模板,模板建站价格便宜,会打字就会建站;第三种是使用阿里云官方定制建站,需要什么样的网站什么功能,阿里云建站专家提供一对一网站定制。参考下表: 阿里云建站方式 所需产品 优势 适用人群 自助建站 ECS云服务器 自行购买云服务器,手动搭建网站 需要些技术门槛,适用于刚接触云计算或对云服务器和建站不太了解、希望自行设计网站的个人或小企业用户。 模板建站 云·速成美站 使用阿里云提供上千套模板,可视化后台管理,会打字就会建站 适合有一定软件应用能力的个人或小企业用户,模板建站支持Web站点、移动端站点、互动表单以及会员支付多场景。 定制建站 云·企业网站定制和功能定制 由阿里云专业网站设计师完成网站设计及搭建 适合对网站有品质要求或个性化需求、希望节省人力和时间成本的...
- 下一篇
揭秘!开源软件背后的神秘组织
每谈及开源、开源社区,就不得不提及 Apache 软件基金会(Apache Software Foundation,ASF),作为全球最大的开源组织,它究竟是如何运行管理的? Flink 社区将分享“走进 ASF”系列内容,先从宏观介绍 ASF 是如何运作的,然后详细解说如何参与 Apache 具体项目做贡献,如何成为某个项目的 Committer、PMC 成员,如何选择多个 Apache 项目进行多领域贡献并成为 ASF Member 等,希望有助于你真正了解开源、参与开源。 我的开源之旅 我2011年加入阿里,经历过若干组织架构调整,做过行为日志 OPlog,阿里郎,云转码,文档转换等若干产品,在2016年10月份由于团队需要有幸接触到 Blink 的开发,开始了解 Apache Flink 社区,由初期的参与社区开发到后来逐渐主导具体模块的开发,到负责 Apache Flink Python API(PyFlink) 的建设。目前是 ASF Member, PMC member of @ApacheFlink and a Committer for @ApacheFlink, @...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Red5直播服务器,属于Java语言的直播服务器
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装