hive3之数据倾斜解决方案

-- 优化方法

-- common join
-- 正常关联逻辑

-- mapjoin
--- 通过广播小表到内存中进行优化

-- bucket map join
-- 通过分桶 广播大表到内存中进行优化

-- sort merge bucket map join
-- 通过分桶 成 倍数的关系 进行优化


-- 聚合 数据倾斜
--解决方案一:类似于分组聚合 key值分配不均匀,在map端聚合 解决数据倾斜问题
set hive.map.aggr = true; -- 开启map端聚合
set hive.map.agg.hash.min.reduction=0.5; -- 聚合前后条数比较
set hive.groupby.mapaggr.checkinterval=100000;-- 聚合条数

-- 方案二:
-- skew-groupby 启用分组聚合数据倾斜优化
set hive.groupby.skewindata = true;
-- 启动两个mr任务,将按照随机数进行发生到reduce 进行聚合 在 发到 第二哥Mr进行 分组聚合

-- join表间关联 数据倾斜
--方案一 使用 map join 解决数据倾斜  大表 小表关联 合适场景
--方案二 skew join 为倾斜的 大 key 单独 使用 一个 map 进行 处理  大表和大表关联
-- 处理一对多 数据倾斜
-- 自动检测 大的倾斜 key 自动走 map join 的任务方式进行关联
set hive.optimize.skewjoin = true;
set hive.skewjoin.key = 100000; -- 自动检测 行数超过 10W 就会自动 启动一个 mr 任务处理
-- 方案三 手动调整sql 大表和大表关联 其中有一个表数据 key 倾斜
 -- 把关联字段 使倾斜的表 对应字段 用子查询 增加 随机 key 进行打散
--  concat(key_col,'_',cast(rand()*n as int)) -- 均匀打撒
-- 对应字段唯一的表,不倾斜的表进行 扩容
--    concat(key_col,'_',1)
--  union all concat(key_col,'_',2)
--  union all concat(key_col,'_',n)

  

posted @ 2025-12-24 23:00  ARYOUOK  阅读(0)  评论(0)    收藏  举报