离线计算中的幂等和DataWorks中的相关事项

摘要: 概念 幂等这个词在软件研发中经常被提到。比如消息发送时不应该同时给同个用户推送多次相同的消息,针对同一笔交易的付款也不应该在重试过程中扣多次钱。曾见过一个案例,有个对于一个单据的确认模块没有考虑到幂等性,导致对应的单据有两条确认记录。

点此查看原文:http://click.aliyun.com/m/42758/

概念

幂等这个词在软件研发中经常被提到。比如消息发送时不应该同时给同个用户推送多次相同的消息,针对同一笔交易的付款也不应该在重试过程中扣多次钱。曾见过一个案例,有个对于一个单据的确认模块没有考虑到幂等性,导致对应的单据有两条确认记录。其实幂等这个词是个数学的概念,表示这个操作执行多次的结果和执行一次是完全一样的。严格的定义这里不展开讨论,有兴趣的可以到网上搜一下,会有很多介绍。通俗一些说,幂等表示这个操作可以多次重跑,不用担心重跑后到结果会乱掉。就赋值而言,i=1就是个幂等到操作,无论做多少次赋值,只要有做成功一次,i的值就是1。而i++就不是一个幂等的操作。如果多次执行这个操作,i的值会不断增加1。

从前面的例子也可以看出,幂等的优势是可以屏蔽重试带来的问题。在分布式的环境里,一般会通过消息中间件、异步调用等方式实现服务之间的解耦。在这过程中,如出现系统异常状况下的状态不明确的情况,一般会进行重试。如果应用不满足幂等的要求,则就会出现错误的结果。

离线计算与幂等

离线计算里的一个作业经常是非常重的,跑一个作业要较多时间。而且由于其特性,经常是凌晨开始计算,在OLTP业务调用量上来以前需要产出结果。如果发现问题,经常没有太多的时间留给技术人员去详细定位问题的原因,然后清理脏数据后重新进行计算。这时候我们需要计算能够进行任意次的重跑,也就是说计算需要满足幂等性。对于一个满足幂等性要求的作业,出现问题的时候,我们可以首先先重跑一下作业,以期能尽快恢复业务,后续再根据之前的日志慢慢定位问题。下面我们以MaxCompute+ DataWorks为例,从不同的角度里讨论离线计算的典型场景——离线数仓,看看都有哪些地方需要做到幂等以及如何做到。

计算

目前的离线计算,出于开发的效率考虑,一般都会考虑使用SQL进行代码开发。SQL里包含DDL和DML两种语句。除了SQL,计算引擎一般还支持MapReduce、Graph等计算模型。

DDL
DDL语法可以通过语句里的if exists/if not exists来确保幂等性。比如创建表可以用create table if not exists xxx,删除表可以通过drop table if exists xxx来保证不报错而且可以重复执行。当然创建表也可以先删除后再创建来事先幂等性。诚然,如果是建表这种“一次性”的操作可以在上线的时候手工做好,但是日常的分区创建/删除等操作就需要通过写进代码里,通过if exists/if not exists来保证可以重试。

DML
DML对数据有影响的是Insert操作。目前Insert有两种模式:Insert into和Insert overwrite。其中Insert into是把数据追加到原来的数据里,而Insert overwrite是把以前的数据直接覆盖。所以可以清楚得看到,Insert into是不满足幂等性要求的,而Insert overwrite是满足的。如果使用Dataworks的SQL节点跑一个Insert into的作业,会有提示

!!!警告!!!
在SQL中使用insert into语句有可能造成不可预料的数据重复,尽管对于insert into语句已经取消SQL级别的重试,但仍然存在进行任务级别重试的可能性,请尽量避免对insert into语句的使用!

我也曾去了解一些使用Insert into的用户,要使用这种数据更新方式的原因,除去数据订正,发现一般都是针对一些不会变化的数据(比如网站的日志、每天的统计结果等)每天需要追加到表里。其实这种更好的方法是创建一个分区表,把每天需要Insert into的数据改成Insert overwrite到每天的一个不同分区里。

MapReduce
MapReduce默认就是使用覆盖写入的模式的。如果确实有需要追加写入,可以使用com.aliyun.odps.mapred.conf.JobConf的setOutputOverwrite(boolean isOverwrite)来实现。
如果需要改成幂等的,可以使用前面SQL里提到的,把数据写入特定的分区里来实现。

ETL
ETL我们暂时不考虑数据清洗(一般数据清洗是通过计算来实现的),而这只讨论数据的同步。在Dataworks里,数据的同步通过数据集成模块来实现。在数仓中,数据同步包括数据导入到数仓和数据从数仓中导出两种场景。

数据导入的场景要实现幂等性比较容易。只需要设置导入的MaxCompute表的清洗规则为“写入前清理已有数据Insert Overwr”即可。这样数据在导入的过程中会先清空数据后再导入,从而实现幂等。

图片描述

数据导出的场景,如果数据是全量导出的,也可以用类似数据导入的方法,配置“导入前准备语句”,把原来的数据全部删除后重新导入。另外如果数据源支持主键冲突设置时,可以通过“主键冲突”设置成“Replace Into”来实现数据的替换。

图片描述

从上面的截图里可以看到,目前Dataworks本身就支持设置“出错重试”,如果同步作业满足幂等性要求的,可以大胆开启这个设置,从而降低运维成本提高稳定性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/522647.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决在待办任务菜单中都会抛出异常,由于definitionId=undefined导致的问题

文章目录一、部门经理流转1. 登录dept账号2. 在待办任务中,签收任务3. 在待办任务中,办理任务3.1. 响应码5003.2. 请求的url3.3. 页面传递的参数3.4. 控制台报错信息提取3.5. 在获取代办列表FlowTaskService的104行3.6. 在获取代办列表FlowTaskService的…

linux7 chkconfig,centos 6-7 chkconfig -systemctl关系对比

CentOS 7 已经切换到 systemd,系统指令也有所变化。之前用于启动、重启、停止各种服务的 service 作为向后兼容的指令还能使用,但是将来可能会消失。同时,chkconfig 也改成了 systemctl 了。这里列举了一些常用的对应于 service 和 chkconfig…

程序员竟以身试“色”,只因给女友选七夕礼物!看完我酸了

戳蓝字“CSDN云计算”关注我们哦!作者 | 伍杏玲出品 | 程序人生(ID:coder_life)铛铛档,你知道 8 月 7 号是什么日子吗?除了是工作日的星期三,它还是七夕情人节!在程序员一片哀嚎“我…

第6篇:Flowable快速工作流脚手架Jsite_请假实战_部门经理审批

接上一篇:第5篇:Flowable快速工作流脚手架Jsite_请假实战_部署流程和发起流程https://blog.csdn.net/weixin_40816738/article/details/103388680 说明:此版本我已经调通,最新版本正在更新,页面未处理好,因…

c语言程序题是如何判分的,C语言编程题判分系统的研究与实现

摘要:随着计算机技术和因特网的发展,B/S模式的教学系统在高校教学中显得越来越重要.C语言程序设计是计算机专业的一门重要的基础课程,具有实践性强的特点,在教学中应加大实践教学比例.本文利用网络技术开发了一个适合于C语言实践课程使用的编程题自动判分系统,用于上…

华为正式发布方舟编译器,相关源码已开放下载;微软开源量子开发工具包 QDK;GitHub回应突然断供:也很无可奈何的样子……...

关注并标星星CSDN云计算极客头条:速递、最新、绝对有料。这里有企业新动、这里有业界要闻,打起十二分精神,紧跟fashion你可以的!每周三次,打卡即read更快、更全了解泛云圈精彩newsgo go go 本田1.34亿份文档&#xff0…

【MPS最佳实践】媒体工作流转码

摘要:背景 1个输入文件对应多个输出文件(不同分辨率,不同格式等),通过控制台的图形化界面,快速搭建常用视频处理流程。 优势 简单易用,视频上传完成自动触发转码任务。 功能强大,支持…

解决由于没有办理权限导致的403,权限不足

接上一篇:解决在待办任务菜单中都会抛出异常,由于definitionIdundefined导致的问题 https://blog.csdn.net/weixin_40816738/article/details/103389663 文章目录一、问题现象二、问题定位三、解决方案3.1. 登录jsite系统管理员账号,给dept用…

音视频转码技术指南:国内主流云转码服务提供商对比测评

摘要:随着大量视频产生,怎样才能够高效精准地对视频进行云端转码和处理,来适配多终端展示需求和应对复杂的网络情况,是我们视频行业开发人员工作的重中之重。作为从业者,我们会经常接触各大云转码服务商,对…

突发!Python再次第一,Java和C下降,凭什么? ​

编程语言流行指数(PYPL)排行榜近日公布了2019年8月份榜单。在最新一期榜单上, Python的份额高达28.73%,再次蝉联第一,并且增长4.5%,同时成为增长势头较好的语言。而被挤到第二蝉联Java,同比下跌2.1个百分点…

c语言万年历的设计任务,万年历设计报告

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include#includechar* month_str[]{"January","February","March","April","May","June","July","August","September","Octob…

第7篇:Flowable快速工作流脚手架Jsite_请假实战_HR审批

接上一篇:第6篇:Flowable快速工作流脚手架Jsite_请假实战_部门经理审批 https://blog.csdn.net/weixin_40816738/article/details/103388916 说明:此版本我已经调通,最新版本正在更新,页面未处理好,因此采用…

智能助手被指侵犯用户隐私,美三大科技巨头或面临调查;传小米已解散其VR头显Mi VR团队;特斯拉成立反欺诈部门……...

关注并标星星CSDN云计算极客头条:速递、最新、绝对有料。这里有企业新动、这里有业界要闻,打起十二分精神,紧跟fashion你可以的!每周三次,打卡即read更快、更全了解泛云圈精彩newsgo go go 谷歌将关闭手机端旅游应用Tr…

Flowable 菜单说明

文章目录一、在线办公1. 待办任务1. 已办任务1. 已发任务二. 流程管理1. 运行中的流程1. 部署流程1. 流程管理1. 模型管理一、在线办公 目前主要是配合工作流模块使用,主要包括以下功能: 1. 待办任务 工作流节点处理人是当前登录用户的话,…

全面提升,阿里云Docker/Kubernetes(K8S) 日志解决方案与选型对比

摘要:今天,日志服务再次升级Kubernetes(k8s)的日志解决方案。1分钟内即可完成整个集群部署,支持动态扩容,提供采集宿主机日志、容器日志、容器stdout等所有数据源的一站式采集。点此查看原文:ht…

c语言几种排序方法的比较,基于C语言的几种排序方法比较.doc

基于C语言的几种排序方法比较.doc基于C语言的几种排序方法比较 【摘要】文章对c语言中的冒泡排序法、选择排序法、插入排序法进行比较讨论,以试图找出最佳排序方法。 【关键词】c语言;排序方法;比较 引言 排序是计算机程序设计中的一种重要操作,其作用是…

JFinalOA导出Excel

JFinalOA导出Excel https://blog.csdn.net/qq_39237801/article/details/87818130

51单片机音乐播放器c语言,51单片机之简单的音乐播放器

/*************************************************************音乐播放器:按键 0 - 9 对应最多10首乐曲,当一首乐曲播放完毕后,响应按键的动作去播放相应的音乐,另外,右、下这两个按键对应着下一首,左上…

再次“重新定义” 华为争做数据基础设施领航者

戳蓝字“CSDN云计算”关注我们哦!数字经济是随着信息技术革命发展而产生的一种新的经济形态。近年来,随着我国开始更多从经济视角观察数字化问题,数字经济开始升温。7月31日,国家统计局发布2018年我国经济发展新动能指数。测算结果…

《阿里巴巴Android开发手册》正式发布,献给移动开发者的新年礼物

春节余味尚未消,我们为移动开发者准备了一份迟到的新年礼物——《阿里巴巴Android开发手册》,继《阿里巴巴Java开发手册》之后,阿里巴巴开发规范家族又添一丁,「阿里巴巴Android开发规范」认证考试也同步上线。 手册免费下载&…