创作

完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>

3天内不再提示

超实用的任务优化与断点执行方案

AndroidPush ? 来源:个推技术实践 ? 作者:渊虹 ? 2021-07-05 16:33 ? 次阅读

前言

随着大数据时代的快速发展,企业每天需要存储、计算、分析数以万亿的数据,同时还要确保分析的数据具备及时性、准确性和完整性。面对如此庞大的数据体系,ETL工程师(数据分析师)如何能高效、准确地进行计算并供业务方使用,就成了一个难题。

作为一家数据智能公司,个推在大数据计算领域沉淀了丰富的经验。本篇文章将对大数据离线计算过程中出现的任务缓慢和任务中断这两大痛点问题提出解决思路,期望读者能够有所收获。

一、任务缓慢

“任务执行缓慢”通常是指任务的执行时间超过10个小时,且不能满足数据使用方对数据及时性的要求。比如业务方需早上就能够查看T-1的数据,但是因为任务延时,业务方只能等到下午或者傍晚才能查询、浏览T-1的数据,从而无法及时发现经营问题、进行高效决策。因此,对缓慢任务进行优化成了ETL工程师必不可少的一项工作。

在长期的大数据实践中,我们发现,缓慢任务往往具有一定的共性。只要我们能找到问题所在,并对症下药,就能将任务执行时间大大缩短。个推将任务执行缓慢的常见问题归纳为以下四点:逻辑冗余,数据倾斜、大表复用,慢执行器。接下来会对每个痛点进行详细阐述。

1、逻辑冗余

“逻辑冗余”往往是因为ETL工程师进行数据处理和计算时更关注处理结果是否满足预期,而未深入考虑是否存在更高效的处理方式,导致原本可通过简单逻辑进行处理的任务,在实际中却使用了复杂逻辑来执行。

减少“逻辑冗余”更多地依赖开发者经验的积累和逻辑思维以及代码能力的提升。这里分享一些高级函数,希望能够帮助开发者进一步提升数据处理效率。

Grouping sets

分组统计函数。这个函数可以实现在一段SQL中输出不同维度的统计数据,避免出现执行多段SQL的情况,具体写法如下:

358e8860-d55e-11eb-9e57-12bb97331649.png

Lateral view explode()

一行转多行函数。这个函数只能处理array格式数据,需要配合split()函数使用,具体写法如下:

3677624c-d55e-11eb-9e57-12bb97331649.png

还有其他一些函数、函数名及功能如下,具体用法需要读者自行查询(可登录hive官网查询函数大全):

find_in_set() :查找特定字符串在指定字符串中的位置

get_json_object():从json串中抽取指定数据

regexp_extract():抽取符合正则表达的指定字符

regexp_replace() :替换符合正则替换指定字符

reverse():字符串反转

2、数据倾斜

“数据倾斜”是指在MR计算的过程中某些Map job需要处理的数据量太大、耗时太长,从而导致整个进程长时间无法结束,任务处理进度长时间卡在99%的现象。

针对数据倾斜的情况,开发者们可通过代码层面进行修改,具体操作如下:

使用group by方式替换count(distinct id ) 方式进行去重统计

进行大小表关联时使用mapjoin操作或子查询操作,来替换 join操作

group by出现倾斜需要将分组字段值随机切分成随机值+原始值

join操作避免出现笛卡尔积,即关联字段不要出现大量重复

3、大表复用

“大表复用”,是指对上亿甚至几十亿的大表数据进行重复遍历之后得到类似的结果。避免大表复用就要求ETL工程师进行系统化的思考,能够通过低频的遍历将几十亿的大表数据瘦身到可重复使用的中间小表,且同时支持后续的计算。

因此,工程师需要在工程开发之初就将整体的工程结构考虑进去,并且坚持“大表仅使用一次”的原则,以提升整个工程的执行效率。

这里介绍一个实战中的例子,供读者参考:

36838676-d55e-11eb-9e57-12bb97331649.png

geqi_win_tmp表中数据:5000万

4、慢执行器

“慢执行器”是指数据体量过于庞大时,Hive的底层计算逻辑已经无法快速遍历单一分区中的所有数据。

由于在同等资源的情况下,Spark进行数据遍历的效率远高于MapReduce;且Spark任务对资源的抢占程度远大于MapReduce任务,可在短时间内占用大量资源高效完成任务,之后快速释放资源,以提高整个集群任务的执行效率。

因此,针对该情况,开发者可考虑使用pyspark等更为高效的计算引擎进行数据的快速遍历。同时,开发者也需要有意识地加强思维训练,养成良好的开发习惯,在面对海量数据时探索更快、更准、更体系化的计算和处理方式。

二、任务中断

因为各种各样的原因,线上任务经常会出现被kill掉然后重新执行的情况。任务重新执行会严重浪费集群资源,同时使得数据计算结果延迟从而影响到业务方的数据应用。如何避免这种现象的发生呢?个推是这样解决该问题的。

个推的定时任务是基于Azkaban调度系统开发的,个推的数据分析师主要使用shell、HSQL、MySQL、Pypark四种代码进行数据处理,将原始日志清洗、计算,然后生成公共层、报表层数据,最终供业务方使用。

因此个推需要设定四种代码执行器以支持脚本中对不同类型代码的处理。这里主要对其中的三个核心内容进行介绍:代码块输入、执行函数以及循环器。

1、代码块输入

一般情况下,脚本中的shell、HSQL、MySQL、pypark代码会按照顺序直接执行,不能选择性执行。在实践中,我们将代码块以字符串的方式赋值给shell中的变量,并在字符串的开头标记是何种类型的代码,代码执行到具体步骤时只有赋值操作,不会解析执行,具体如下:

? 执行HSQL代码块

36d0d5a2-d55e-11eb-9e57-12bb97331649.png

? 执行shell代码块

36dda980-d55e-11eb-9e57-12bb97331649.png

? 执行mysql代码块

36eb8d48-d55e-11eb-9e57-12bb97331649.png

? 执行pyspark代码块

36f7b424-d55e-11eb-9e57-12bb97331649.png

如此,就实现了将不同的代码放入对应的step_n中。在后续的执行器中这些代码能够直接执行,开发者只需要关心逻辑处理即可。

2、执行函数

执行函数是对shell中变量step_n当中的字符串进行代码解析并执行。不同类型的代码块解析方式不同,因此需要定义不同的执行函数。函数一般单独放在整个工程的配置文件中,通过source的方式调用,具体函数定义如下:

3703effa-d55e-11eb-9e57-12bb97331649.png

Hive、MySQL以及shell的执行函数比较简单,通过hive-e 或者eval的方式就可以直接执行。pyspark需要配置相应的队列、路径、参数等,还需要在工程中增spark.py文件才能执行,此处不做赘述。

3、循环器

循环器是断点执行功能的核心内容,是步骤的控制器。循环器通过判断shell变量名确定需要执行哪一步,通过判断变量中字符串内容确定使用何种函数解析代码并执行。

下图是参考案例,代码如下:

37159a0c-d55e-11eb-9e57-12bb97331649.png

开发者需要在脚本的开始定义好整个代码的结束步骤,以确保循环器正常运行;同时,可将开始步骤当作脚本参数传入,这样就很好地实现了任务的断点执行功能。

总结

ETL工程中的任务缓慢和任务中断问题是每个大数据工程师都需要面对和解决的。本文基于个推大数据实践,针对任务缓慢和任务中断问题提出了相应解决思路和方案,希望能够帮助读者在任务优化以及ETL工程开发方面扩宽思路,提高任务执行效率,同时降低任务维护的人力成本和机器成本。

编辑:jq

原文标题:ETL工程师必看!超实用的任务优化与断点执行方案

文章出处:【微信号:AndroidPush,微信公众号:Android编程精选】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    中科曙光以大数据为核心驱动智慧农业数字化升级

      随着“云、大、物、智”等新一代信息技术与农业生产经营深度融合,智慧农业的应用场景不断创新,为农业....
    的头像 中科曙光 发表于 05-19 20:31 ? 266次 阅读

    荣联助力中科院上海有机所冷冻电镜大数据计算系统建设

    中国科学院上海有机化学研究所(简称上海有机所)是集基础研究、应用研究和高技术创新研究为一体的综合性化....
    的头像 电子行业新闻 发表于 05-19 17:12 ? 127次 阅读
    荣联助力中科院上海有机所冷冻电镜大数据计算系统建设

    中移物联网携手陕西移动打造智能支付解决方案

    目前,传统金融机构与新兴金融机构都在积极拥抱人工智能、大数据、区块链、物联网、云计算等新兴科技,以期....
    的头像 话说科技 发表于 05-19 16:19 ? 228次 阅读

    申请函数kmalloc、kzalloc、vmalloc区别说明

    我们都知道在用户空间动态申请内存用的函数是 malloc(),这个函数在各种操作系统上的使用是一致的....
    的头像 Linux内核补给站 发表于 05-19 16:13 ? 122次 阅读

    浪潮分布式存储AS13000搭建血液病检测平台

    因分析、基因诊断、白血病分型、指导治疗、判断预后等领域已经有了成熟应用,而其中血液学已成为了此类现代....
    的头像 科技绿洲 发表于 05-19 15:17 ? 244次 阅读

    云天励飞成为数据发展联盟首批成员单位之一

    近日,广东数据发展联盟(下称“联盟”)成立大会在广州举行。大会审议并表决了联盟章程和选举办法,选举了....
    的头像 科技绿洲 发表于 05-19 14:20 ? 174次 阅读

    汉威城市生命线感知与安全运营平台构筑安全城市地下“生命线”

    汉威“城市生命线感知与运营平台”根据政府监管要求,综合运用云计算、大数据、网络通讯、物联感知等先进技....
    的头像 科技绿洲 发表于 05-18 17:04 ? 391次 阅读

    曙光“四位一体”建设模式保障智算中心建成后应用创新

    近日,湖北首个5A级智算中心在随州高新区正式开建。该项目自今年3月正式签约以来,相关工作就紧锣密鼓地....
    的头像 科技绿洲 发表于 05-18 16:37 ? 213次 阅读

    Tampermonkey Chrome脚本扩展

    ./oschina_soft/tampermonkey.zip
    发表于 05-18 15:00 ? 3次 阅读
    Tampermonkey Chrome脚本扩展

    ObjectiveSQL IntelliJ IDEA Plugin是对ObjectiveSQL框架在IDEA开发必备工具

    ./oschina_soft/ob<x>jectiveSql-IntelliJ-Plugin.zip
    发表于 05-18 14:20 ? 8次 阅读
    ObjectiveSQL IntelliJ IDEA Plugin是对ObjectiveSQL框架在IDEA开发必备工具

    云计算、大数据及人工智能企业海航科技发布2022第一季度报告

    云计算、大数据及人工智能企业海航科技股份有限公司发布2022第一季度报告,具体内容如下。 一、 主要....
    的头像 汽车玩家 发表于 05-18 11:53 ? 297次 阅读

    紫光同芯推出具有安全密码功能和片上存储功能安全芯片

    作为安全芯片领导者,紫光同芯聚焦运营商身份认证和安全连接,推出具有安全密码功能和片上存储功能的安全芯....
    的头像 科技绿洲 发表于 05-18 11:12 ? 170次 阅读

    数据存储也需要全生命周期管理 热温冷冰四类数据归档存储平台发力

    随着云计算、大数据等新兴的应用模式广泛普及,业务数据呈现爆炸式增长,面对日益增长的数据量;东数西算基....
    的头像 浪潮存储 发表于 05-18 10:24 ? 226次 阅读

    手动版实现带箭头的线段绘制

    我根据一个矩形进行了各种角度旋转,就想通过绘制一个带方向的线段表示它,通过旋转矩阵很容易的获取了两个....
    的头像 OpenCV学堂 发表于 05-17 11:24 ? 145次 阅读

    大数据企业中昌数据发布2022第一季度报告

    大数据企业中昌数据发布2022第一季度报告,具体内容如下。 一、 主要财务数据 (一)主要会计数据和....
    的头像 汽车玩家 发表于 05-17 10:18 ? 270次 阅读

    短短几行代码,就能画出如此绚烂的图像

    参赛者需要用C++编写代表三原色的RD、GR、BL三个函数,每个函数都不能超过 140 个字符。每个....
    的头像 嵌入式ARM 发表于 05-16 15:34 ? 198次 阅读

    SQL优化经历:从30248.271s到0.001s

    正常情况下是先join再进行where过滤,但是我们这里的情况,如果先join,将会有70w条数据发....
    的头像 数据分析与开发 发表于 05-16 15:25 ? 240次 阅读

    EDR系统主要功能模块及原理

    除了司机和车企外,自动驾驶还有相关的硬件制造商、软件制造商,这些都可归属于车内部的责任方。另外,还有....
    的头像 科技绿洲 发表于 05-16 15:14 ? 286次 阅读

    一个单片机调试小工具的编程思路

    在使用keil编译STM32后,我们会在.hex文件的同一个文件夹中发现一个.map文件。这个.ma....
    的头像 硬件攻城狮 发表于 05-16 14:35 ? 190次 阅读

    力源宝科技积极助力普洱市打造千亿元现代林产业

     2022年5月,广西力源宝科技有限公司普洱分公司揭牌仪式在云南普洱举行,普洱市林草局林业草原改革与....
    的头像 科技绿洲 发表于 05-16 11:14 ? 220次 阅读

    PolarDB-X云原生分布式数据库系统

    ./oschina_soft/galaxysql.zip
    发表于 05-16 10:44 ? 13次 阅读
    PolarDB-X云原生分布式数据库系统

    Carina基于Kubernetes CSI标准实现的存储插件

    ./oschina_soft/carina.zip
    发表于 05-16 10:40 ? 1次 阅读
    Carina基于Kubernetes CSI标准实现的存储插件

    Engula云原生存储引擎

    ./oschina_soft/engula.zip
    发表于 05-16 10:19 ? 3次 阅读
    Engula云原生存储引擎

    Kubegres部署和维护PostgreSQL集群的Kubernetes Operator

    ./oschina_soft/kubegres.zip
    发表于 05-16 10:17 ? 6次 阅读
    Kubegres部署和维护PostgreSQL集群的Kubernetes Operator

    Siddhi云原生流处理器

    ./oschina_soft/siddhi.zip
    发表于 05-16 10:10 ? 10次 阅读
    Siddhi云原生流处理器

    JuiceFS分布式文件系统

    ./oschina_soft/juicefs.zip
    发表于 05-16 09:54 ? 5次 阅读
    JuiceFS分布式文件系统

    Fluid-Cloudnative云原生大数据应用支撑平台

    ./oschina_soft/fluid.zip
    发表于 05-16 09:44 ? 12次 阅读
    Fluid-Cloudnative云原生大数据应用支撑平台

    ChubaoFS分布式文件系统

    ./oschina_soft/chubaofs.zip
    发表于 05-16 09:36 ? 3次 阅读
    ChubaoFS分布式文件系统

    ROOK Kubernetes云原生存储

    ./oschina_soft/rook.zip
    发表于 05-16 09:22 ? 12次 阅读
    ROOK Kubernetes云原生存储

    视频图像处理及大数据企业中科通达发布2022年第一季度报告

    视频图像处理及大数据企业武汉中科通达高新技术股份有限公司发布2022年第一季度报告,具体内容如下。 ....
    的头像 汽车玩家 发表于 05-16 09:21 ? 260次 阅读

    TrafficTeach大数据项目:车流量监控

    ./oschina_soft/TrafficTeach.zip
    发表于 05-16 09:13 ? 11次 阅读
    TrafficTeach大数据项目:车流量监控

    大数据及人工智能厂商博睿数据发布2021年报

    大数据及人工智能厂商博睿数据北京博睿宏远数据科技股份有限公司发布2021年报告,具体内容如下。 近三....
    的头像 汽车玩家 发表于 05-16 09:02 ? 281次 阅读

    CH559如何设置20byte常态存储不在IK byte清除范围内?

    你好! 我现在用CH559做一款USB离线产品,之前用到了100byte空间做快速存储和清除,最近客户更新要求需要20byte做常态存储,有需...
    发表于 05-16 06:39 ? 30次 阅读

    新亚胜光电户内固装Mwall高亮系列满足客户多种需求

    5月13日,西班牙 ISE 2022圆满收官,新亚胜光电多款固装及租赁新品亮相展会现场,给参展观众带....
    的头像 科技绿洲 发表于 05-15 11:20 ? 335次 阅读

    忆芯科技与美亚国云签订战略合作协议

    2022年5月12日,国产高性能企业级SSD头部企业忆芯科技与美亚柏科控股子公司福建美亚国云智能装备....
    的头像 科技绿洲 发表于 05-15 10:54 ? 354次 阅读

    易华录正式发布智慧交通大数据服务解决方案

     2022年5月13日,易华录2022年合作伙伴线上大会成功召开。本次交流会以“合作共生,聚能而为”....
    的头像 科技绿洲 发表于 05-15 09:33 ? 363次 阅读

    五种Python模块介绍及用途说明

    Python 标准库有超过 200 个模块,程序员可以在他们的程序中导入和使用。虽然普通程序员对其中....
    的头像 马哥Linux运维 发表于 05-13 17:27 ? 344次 阅读

    四维图新依托大数据及地理信息领域相关技术 全面助力疫情指挥工作开展

    “疫情时空分析平台”是世纪高通基于自身MineData位置大数据平台和疫情业务开发经验,全力打造的疫....
    的头像 科技绿洲 发表于 05-13 17:04 ? 368次 阅读

    可以节省Python执行时间的四种方式

    今天我想和大家分享 4 个省时的 Python 技巧,可以节省 10~20% 的 Python 执行....
    的头像 马哥Linux运维 发表于 05-13 17:01 ? 229次 阅读

    浅谈数据系统架构核心组件及存储组件选型

    Lambda架构的核心思想是将不可变的数据以追加的方式并行写到批和流处理系统内,随后将相同的计算逻辑....
    的头像 要长高 发表于 05-13 15:53 ? 547次 阅读
    浅谈数据系统架构核心组件及存储组件选型

    SQL优化的一般步骤与案例分析

    在应用开发的早期,数据量少,开发人员开发功能时更重视功能上的实现,随着生产数据的增长,很多 SQL ....
    的头像 数据分析与开发 发表于 05-13 14:56 ? 81次 阅读

    Numpy数组的高级操作总结

    NumPy 包含一个迭代器对象numpy.nditer。它是一个有效的多维迭代器对象,可以用于在数组....
    的头像 数据分析与开发 发表于 05-13 12:53 ? 160次 阅读

    曙光自研存储ParaStor持续为地震监测提供底层技术支持

    大数据、云计算等新技术与地震数据相融合,已成为推动防震减灾科技创新发展的新途径。国家地震局第二监测中....
    的头像 科技绿洲 发表于 05-13 11:23 ? 218次 阅读

    Blueboat Cloudflare Workers的开源替代品

    ./oschina_soft/blueboat.zip
    发表于 05-13 11:19 ? 8次 阅读
    Blueboat Cloudflare Workers的开源替代品

    OpenFunction FaaS框架

    ./oschina_soft/OpenFunction.zip
    发表于 05-13 10:06 ? 5次 阅读
    OpenFunction FaaS框架

    MatrixOne云端原生大数据引擎

    ./oschina_soft/matrixone.zip
    发表于 05-13 09:38 ? 17次 阅读
    MatrixOne云端原生大数据引擎

    讯维分布式可视化控制系统大大提高指挥决策的准确性

    讯维分布式可视化控制系统是专为防汛应急指挥中心打造的一套可视化、智能化信息调度控制系统。其采用分布式....
    的头像 科技绿洲 发表于 05-12 16:47 ? 255次 阅读

    flashDB TSDB数据库插入数据时报错是为什么?

    flashDB TSDB的get_time函数时返回的系统时间戳,在使用中出现我偶然错误的将RTC时间设置得比现在的时间要大很多,后面...
    发表于 05-12 16:14 ? 2162次 阅读

    曙光分布式存储系统ParaStor提高地震等自然灾害预报能力

    大数据、云计算等新技术与地震数据相融合,已成为推动防震减灾科技创新发展的新途径。国家地震局第二监测中....
    的头像 科技绿洲 发表于 05-12 15:20 ? 148次 阅读

    基于k近邻与高斯噪声的虚拟困难样本增强方法

    然而在无监督SimCSE中,作者仅使用dropout的方式进行了正样本增强,没有额外引入困难样本,这....
    的头像 深度学习自然语言处理 发表于 05-12 11:31 ? 112次 阅读

    UFX+U_DISK\EXAM1读U盘出错是为什么?

    U盘数据: *S* 00000000000 11111111111 22222222222 33333333333 44444444444 55555555555 66666666666 77777777777...
    发表于 05-12 08:46 ? 74次 阅读

    rt-thread有没有一次采样多个数据的函数?

    使用定时器1捕获比较事件触发ADC采样,rt-thread有没有类似HAL库 HAL_ADC_Start_DMA这种一次可以采集多个数据的...
    发表于 05-09 10:00 ? 1206次 阅读

    在线程里加了一个函数整个系统就卡死了怎么解决

    函数是这样 我把给数组赋值的那个语句注释掉,系统就正常了 求大佬帮助 ...
    发表于 05-05 09:54 ? 1151次 阅读

    for循环耗时太长,请大佬帮忙

    两个数据库A、B都有产品序列号关联起来,我想检索并显示数据库A中有记录,而在数据库B中没有记录的信息。目前的程序也可以...
    发表于 04-29 16:21 ? 10234次 阅读

    rt_thread_mdelay影响调试的运行时间怎么办

    用ozone 调试rt工程时候,如果代码内用了rt_thread_mdelay就会影响运行时间。 比如: break point A; rt_thread_mdelay(50...
    发表于 04-27 12:37 ? 4558次 阅读

    求助!使用micropython调用串口数达到4个后 ,程序卡在了rt_device_open函数

    使用micropython调用串口数达到4个后 创建最后一个串口对象卡住,程序是卡在了rt_device_open这个函数 ...
    发表于 04-27 09:39 ? 1947次 阅读

    为什么rt_malloc申请的内存地址会与正在运行的任务B重叠

    我在STM32F103中使用了RTTHREAD,同时运行多个任务, 然后在任务A中malloc一块内存用于存储字符串数据,使用完成后...
    发表于 04-26 14:47 ? 3827次 阅读

    ARM函数调用过程说明

    ARM函数调用默认4个参数用R0-R4传递,大于4个用堆栈传递,局部变量保存在堆栈中,下面以一个简单的函数来说明这个过程。先定...
    发表于 04-26 10:05 ? 3061次 阅读
    她的小梨涡完整版免费阅读