HashTable 在蚂蚁转化归因中的极致运用

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介: 本文主要讲述hash cluster表的一些运用。

1.概述


蚂蚁的转化归因在初期运行两个多小时的情况下,进行了一系列优化,其中建立hash cluster表及强制hash关联及Shuffle的手动干预进行remove操作此部分优化占了较大比重。本文则主要讲述hash cluster表的一些运用。

Hash cluster表具有两个作用:

· 存储预排序的重排压缩。Hash cluster表采用分桶排序操作,若相同的值重复度高,则可以达到更好的压缩效果。

· 下游任务的Shuffle Remove。Hash cluster表由于采用对指定字段分桶操作,下游若一些关联、聚合操作与分桶键策略相同,则会进行Shuffle Remove操作。MaxCompute操作中,Shuffle是昂贵的,因此有必要在优化阶段尽可能移除不必要的Shuffle。什么情况下可以移除Shuffle?简单来说就是数据本身已经具有某些数据分布特性,刚好这个数据分布特性满足了上游算子对这份数据的分布要求,就不需要再做Shuffle,这个也是Hash cluster表的重要应用场景


2.前言


转化归因任务加工相对较复杂,在此对其中关键步骤做个说明:

1、源头分三部分,访问日志数据A,点击日志数据B,接入的事件数据C,此三部分数据表已设置为4096分桶的hash表。

2、以上三部分数据以用户进行分组,分别传入用户的点击、访问和事件数据,通过udf处理得到单用户的归因结果数据(以字条串返回)。

3、返回以用户粒度的结果数据进行字段拆分后以用户的事件id进行膨胀,膨胀后关联用户事件数据补充事件数据后其它字段。

4、上一步关联后的结果数据以日志id进行膨胀,膨胀后的数据关联访问和点击日志数据得到日志中的其它一些补充字段。


以上步骤按单用户数据处理过程流程大致如下:

1.jpg

图(1)


以支付宝支付线来讲,最初总计运行两个来小时,加工逻辑步骤有近十来个任务。后续进行了udf优化并逻辑合并为一个script,图2右部分。

image.png

图(2)

image.png

图(3)


3.优化过程


3.1中间状态

以下任务是在经过多任务合并为一script任务后内容,其中源头输入表点击(mid_log_clk_xxxx_di)和访问(mid_log_vst_xxxx_di)表建立hash cluster,而事件表是以事件代码为二级分区的普通表(事件表是通过页面通过不同的事件码在线接入后生成不同的任务产出的表),以支付线为例,任务改造后稳定在半小时左右,但目前随着事件增加有所增长。


点击访问建表主要内容

CLUSTERED BY (user_id ASC) SORTED BY (user_id ASC,log_id ASC) INTO 4096 BUCKETS

整体运行图如下,相比原来十来个任务,无论是日常运行、历史回刷都变的相对简洁。

image.png

图(4)


在此过程中个人分析若事件输入表能在运行过程中变hash cluster的话,那下游按理可再减少一些Shuffle操作,尝试对事件表增加 DISTRIBUTE BY  user_id SORT BY scene_type,order_id 操作且设置参数set odps.sql.reducer.instances=4096,但测试发现下游对此无感知,联系MaxCompute 开发人员得知目前暂无此功能。


接入事件hash表不能在运行中得到那只能再增加一个任务把事件数据插入一cluster表供任务使用,但由于在主链路上,增加的时间影响整体产出时间,但以支付线几个亿数据量为例,插入cluster表整体3分钟左右,建立cluster后整体执行图如下:

image.png

图(5)


以上执行图已经相当简单,运行速度相比原来任务及增加的上游整体也有一定的提升,但是发现两主task中,m3和m4同样都是4096实例,都是按用户分桶进行的分发,按理此两M应该是可以Shuffle remove进行合并的,问及MaxCompute开发人员大致是一些复杂操作后属性丢失后不能消除Shuffle。


3.2最终状态

虽然图5的执行计划相对来说已经非常简洁,但一些实际结果与认知不同时总想找到问题出在哪里。因此,我对任务中的一些sql嵌套进行层次减少,对一些关联先拆解再慢慢增加,在此过程中发现增加了一个小表的mapjoin会导致下游需要进行Shuffle(理论上小表mapjoin不影响主表分发),其中一个黑名单列表,数据量少且近三年都无增加数据,因此直接改造为固定值传入,另外一个小表在最后再进行mapjoin关联,最终执行图如下,只有一个主的task,非常简洁。

image.png

图(6)


以下为m2中的算子,非常复杂,但无需Shuffle执行效率非常高。

image.png

图(7)

3.3执行结果

最终执行时长不到20分钟,相对原先减少一半,而且消耗的cu及内存都有所降低,转化归因整体链路产出提前20分钟+。

image.png

图(8)

image.png

图(9)


4.总结


1、本文的一些优化整体是基于Hash Clustering Table的建立,在创建Hash表时需要考虑分桶键的设定,并不是说一定要所有的关联键设置为分桶键,在考虑Hash的一些任务性能的同时,也需要考虑表的存储压缩大小。

2、针对MaxCompute平台的一些策略原理,首先需要有自己的一些自身认知,很多时候不一定是一两个文档能够说清楚,更需要一些实践的测试来加深知识点的理解。

3、MaxCompute很多方面已经非常智能及高效,希望在自动的优化方面可以更加智能


MaxCompute发布免费试用计划,为数仓建设提速】新用户可0元领取5000CU*小时计算资源与100GB存储,有效期3个月。立即领取>>


相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
2天前
|
存储 算法 安全
C 语言中的位运算:挖掘底层计算的高效力量
位运算是C语言中直接操作二进制位的一种技术,能高效处理底层数据,广泛应用于优化算法、硬件编程等领域,是掌握C语言高级特性的关键之一。
|
7月前
|
存储 并行计算 算法
【深度挖掘Java性能调优】「底层技术原理体系」深入挖掘和分析如何提升服务的性能以及执行效率(性能三大定律)
【深度挖掘Java性能调优】「底层技术原理体系」深入挖掘和分析如何提升服务的性能以及执行效率(性能三大定律)
86 0
|
7月前
|
编解码 算法 前端开发
聊聊我从底层算法到业务算法转型的这一年
聊聊我从底层算法到业务算法转型的这一年
225 0
|
7月前
|
存储 监控 数据库
改良海量数据存储的若干的手段-转变数据垃圾为黄金
改良海量数据存储的若干的手段-转变数据垃圾为黄金
54 0
|
7月前
|
存储 新零售 监控
挖掘业务场景的存储更优解
挖掘业务场景的存储更优解
|
安全 区块链
如何用行为设计优化商业模式和运营效率
如何用行为设计优化商业模式和运营效率
96 0
|
算法 搜索推荐 C语言
【八大排序(十)】八大排序效率与稳定性分析
【八大排序(十)】八大排序效率与稳定性分析
|
存储 算法 Java
【难点攻克技术系列】「海量数据计算系列」如何使用BitMap在海量数据中对相应的进行去重、查找和排序
【难点攻克技术系列】「海量数据计算系列」如何使用BitMap在海量数据中对相应的进行去重、查找和排序
290 0
【难点攻克技术系列】「海量数据计算系列」如何使用BitMap在海量数据中对相应的进行去重、查找和排序
|
图形学
为什么说“3D建模”是未来不可少的行业
随着国家文化政策的大力支持,一场新世纪的文化复兴运动,正在悄然展开。文化娱乐产业蓬勃发展,而随着生活水平的不断提高,人们也越来越愿意在精神享受上花钱。**电影行业、游戏行业**就是两个典型的例子。
134 0
为什么说“3D建模”是未来不可少的行业
|
数据挖掘 测试技术 数据处理
数据分析实战 | A/B测试探寻哪种广告点击率更高?
数据分析实战 | A/B测试探寻哪种广告点击率更高?
数据分析实战 | A/B测试探寻哪种广告点击率更高?