Bendi新闻
>
一种基于ODPS SQL的全局字典索引分布式计算思路
一种基于ODPS SQL的全局字典索引分布式计算思路
4月前
阿里妹导读
在一些业务场景中,我们需要将字符串映射为一个整形数字,并确保全局唯一,比如在BitMap字典索引计算场景。常用的方法是将数据集根据需要映射的字符串做全局order by排序,将排序号作为字符串的整形映射。该方式能达到目标,但如果一次要计算的数据量太大(十亿级别或更大),会跑耗时较久甚至跑不出来。
本文提供一种能充分利用分布式计算资源来计算全局字典索引的方法,以解决在大数据量下使用上诉方式导致所有数据被分发到单个reducer进行单机排序带来的性能瓶颈。
order by方式
sort_data数据集中id已经唯一,数据量级9.3亿,直接对数据集全局开窗排序写法如下:
INSERT OVERWRITE TABLE test_data_result
SELECT id
,ROW_NUMBER() OVER (ORDER BY id ASC ) AS rn
FROM test_data
;
DAG图:
耗时30分钟,reducer只有一个,这里设置set odps.sql.reducer.instances=256是不起作用的,在这种方式下reducer只能有一个才能保证是全局唯一的。
分布式优化思路
大数据量下计算最忌讳的就是演变为单机计算,好一点的情况是跑很久,数据量再大可能直接跑不出来。如何利用计算资源水平扩展的优势来解决?思路是先做分桶进行分布式局部排序、再基于桶大小得到全局索引。类似于操作系统指令寻址的基址寻址,我们需要对每个id做绝对地址映射,利用一个基址加上相对地址得到绝对地址。
代码参考如下:
--第一步
WITH hash_bucket AS
(
SELECT id
,ROW_NUMBER() OVER (PARTITION BY bucket_no ORDER BY id ASC ) AS bucket_rel_index
,COUNT(1) OVER (PARTITION BY bucket_no ) AS bucket_size
,bucket_no
FROM (
SELECT id
,ABS(HASH(id)) % 100000 AS bucket_no
FROM test_data
)
)
--第二步
,bucket_base AS
(
SELECT bucket_no
,SUM(bucket_size) OVER (ORDER BY bucket_no ASC ) - bucket_size AS bucket_base
FROM (
SELECT DISTINCT bucket_no
,bucket_size
FROM hash_bucket
)
)
--第三步
INSERT OVERWRITE TABLE sort_data_result_1
SELECT /*+ MAPJOIN(t2) */
t1.id
,t2.bucket_base + bucket_rel_index AS id_index
FROM hash_bucket t1
JOIN bucket_base t2
ON t1.bucket_no = t2.bucket_no
;
2.第二步根据桶大小计算每个桶的基址;
3.第三步将桶基址+id在桶内的相对地址得到全局唯一的绝对地址id_index;
优化后避免了单机计算,耗时2分钟。
日常优化记录,也许并非最优,如有其他方式欢迎探讨。
随需而动:自动弹性,稳定交付
微信扫码关注该文公众号作者
来源:阿里云开发者
相关新闻
熬夜,一种自虐式的甜蜜增强 Mock 服务器:一种基于 UI 的方式刺杀是一种无能狂怒式的懦弱行为华东师大Nat. Commun.:一种铁电鳍式二极管的新型非易失性存储器北航、滴滴联合提出一种新的增量度量框架,实现动态图结构熵的高效增量计算王自如下岗的一种可能原因上海中产怎就成了代表中国的一种“典型”?下半年的思路营销大变天,CMO们花钱的思路也得跟着变热血创业+现实商战,《赤热》是如何打开“科创剧”新思路的?成立3年,拿下天猫618双品类冠军,SINSIN的思路可以直接抄作业吗?构建债基组合,一个简单可行的思路"看上去很好吃"!安省各地常见的一种植物恐致命:越成熟越有毒!滥发货币,洗劫国民财富最残酷的一种方式营养丰富的“红宝石油”,来自南极洲的一种微小生物,被称作中老年的福音!高龄生二胎后,我改用开公司的思路养娃,终于没那么累了……研究生多到无宿舍可住?冯仑:这是就业压力加大的一种表现中国最神秘的一种人:谋局者(强烈推荐)一级投资基金业绩图像化展示和评估的一种方法隐忍20年,离婚时才懂得:优雅地愤怒,是女性的一种高级力量吴军:为何美国语文教学的思路值得我们借鉴?儿子迷上了全球最富有的女歌手,我发现养娃的思路该变一变了!偷偷告诉你,「色斑」最怕的一种东西,再严重的斑都有救!知乎张荣乐:职业教育是知乎社区专业讨论场的一种延展|氪金