编程知识 cdmana.com

氪信团队再夺冠!易观数科第四届OLAP算法大赛前三甲诞生!

10月24日,易观数科第四届OLAP算法大赛正式落下帷幕,本届大赛由UCloud赞助、思否、infoQ、CSDN等技术媒体提供支持。历时40多天,经历了大赛报名、测试体验、正式比赛等重重环节,氪信团队、火山酱油团队、谦谦团队脱颖而出,夺得前三甲,奖励分别为6万、3万、1万现金大奖。授奖仪式在10月24日的2020易观A10数据智能峰会开发者日上进行,易观CTO郭炜为获奖者颁奖。

 

随后,冠军团队——氪信团队进行了比赛分享。氪信团队去年就曾以300毫秒准确处理8亿条行为数据的成绩夺得了易观第三届OLAP算法大赛冠军,今年面对不一样的题目和规则,毫不示弱,再度折冠!

 

赛题解读

今年的赛题,相当于提供了一个APP用户运营的场景,原始数据为十亿量级的用户行为数据,比如某个用户访问了AI,做了一个行为比如查看一件商品、购买等,而平台有5000万的用户数据,这也就意味要将用户属性、用户分群关联到数十亿事件的序列上面,这其实是一个在相对有限的机器环境下有挑战的问题。

而正式比赛时使用的三台8C16G的机器,要把查询任务做到几秒甚至几百毫秒,这其实就是算法本身的一个重大挑战。

 

本届赛事难点

本届算法大赛,选手虽然提前3天拿到服务器和正式比赛数据,看起来有较富裕的预处理时间。但在比赛前15分钟,选手们会收到100多万的增量数据,时间短到不足以对全量数据做预计算、建cube。

第四届OLAP算法大赛以事件分析为主题,题目要求进行event表和profile表的关联,两个表之间数据量对比为1000000000 VS 50000000,join开销过大。此外,题目还考察参赛者计算去重小计数、中位数等指标的分布式计算方法,较为复杂。

 

解题思路与技巧

氪信团队选取了ClickHouse + 氪信准实时分析平台来完成本次比赛,基于用户ID和日期分别建立分片,然后根据题目类型自行选择合适的分片来执行计算。采用了列存+低基数(low cardinality)优化+数据压缩的存储方案,计算方案上则采用零共享MPP+CPU指令集优化+数据加热的方式。

 

10亿条对5000万条的关联,如果我们称之为相对较大的join,那么在三台配置较低的机器下,内存和硬盘的使用都要非常谨慎。氪信团队的解决方案是:

 

首先,通过离线任务的方式,将历史数据整合成大宽表,并将未能成功关联的event 表数据抽离出来;

随后,在获取到100万条event、5万条profile的增量数据后,将增量event 与未关联的历史event数据、全量profile做关联,这样需要join的数据仅为数百万对5000w条数据关联,大大降低了内存压力;

最后,做多维查询时,仅需要对预处理好的单表进行操作,而这正是clickhouse擅长的工作。

 

经验分享

比赛时究竟是追求极致的速度、还是灵活性/回退能力?氪信团队在分享中提到,LZ4的解压性能是主要瓶颈;在计算小计/总计时,浪费了一次完成的扫描过程,可以用-Resample 组合并扫描;通过预排序/预分组则可以节省去重计数的开销。

随着颁奖仪式的结束,易观第四届OLAP算法大赛至此圆满收官。自8月份开启选手报名通道以来,收到了来自爱奇艺、哔哩哔哩、中国移动、中科院计算所、中南大学等超百家团队的报名。除了冠军团队在会上的分享,亚军酱油团队、季军谦谦团队也分别提交了答辩PPT,前三甲的源代码也都将开源出来供爱好者浏览学习。


可前往算法大赛官网查看:http://ds.analysys.cn/portal/2020-index.html

 

作为国内OLAP算法领域内的重要赛事,易观近四年来的坚持旨在推动国内OLAP技术的交流,荟聚算法智慧,为推动数据计算和应用能力、践行数据能力平民化而努力。期待明年有更多团队加入算法大赛!

 

版权声明
本文为[易观大数据]所创,转载请带上原文链接,感谢
https://my.oschina.net/u/4586633/blog/4713917

Scroll to Top