美文网首页
hive 数据倾斜

hive 数据倾斜

作者: 团团饱饱 | 来源:发表于2021-05-12 17:47 被阅读0次

    1、Hive 不同数据类型关联产生数据倾斜

    情形:比如用户表中 user_id 字段为 int,log 表中 user_id 字段既有 string 类型也有 int 类型。当按照 user_id 进行两个表的 Join 操作时。
    后果:处理此特殊值的 reduce 耗时;只有一个 reduce 任务
    默认的 Hash 操作会按 int 型的 id 来进行分配,这样会导致所有 string 类型 id 的记录都分配
    到一个 Reducer 中。
    解决方式:把数字类型转换成字符串类型
    select * from users a
    left outer join logs b
    on a.usr_id = cast(b.user_id as string)

    总结:关联字段类型统一

    2、key本身分布不均

    可以在key上加随机数,或者增加reduceTask数量

    开启数据倾斜时负载均衡
    set hive.groupby.skewindata=true;
    思想:就是先随机分发并处理,再按照 key group by 来分发处理。
    操作:当选项设定为 true,生成的查询计划会有两个 MRJob。
    第一个 MRJob 中,Map 的输出结果集合会随机分布到 Reduce 中,每个 Reduce 做部分聚合操作,并输出结果,这样处理的结果是相同的 GroupBy Key 有可能被分发到不同的Reduce 中,从而达到负载均衡的目的;

    第二个 MRJob 再根据预处理的数据结果按照 GroupBy Key 分布到 Reduce 中(这个过程可以保证相同的原始 GroupBy Key 被分布到同一个 Reduce 中),最后完成最终的聚合操作。

    相关文章

      网友评论

          本文标题:hive 数据倾斜

          本文链接:https://www.haomeiwen.com/subject/xyoadltx.html