zoukankan      html  css  js  c++  java
  • HIVE高级(12):优化(12) 数据倾斜

    0 简介

      绝大部分任务都很快完成,只有一个或者少数几个任务执行的很慢甚至最终执行失败,这样的现象为数据倾斜现象。
      一定要和数据过量导致的现象区分开,数据过量的表现为所有任务都执行的很慢,这个时候只有提高执行资源才可以优化 HQL 的执行效率。
      综合来看,导致数据倾斜的原因在于按照 Key 分组以后,少量的任务负责绝大部分数据的计算,也就是说产生数据倾斜的 HQL 中一定存在分组操作,那么从 HQL 的角度,我们可
    以将数据倾斜分为单表携带了 GroupBy 字段的查询和两表(或者多表)Join 的查询。

    1 单表数据倾斜优化

    1.1 使用参数
    当任务中存在 GroupBy 操作同时聚合函数为 count 或者 sum 可以设置参数来处理数据倾斜问题
    是否在 Map 端进行聚合,默认为 True
    set hive.map.aggr = true;
    在 Map 端进行聚合操作的条目数目
    set hive.groupby.mapaggr.checkinterval = 100000;
    有数据倾斜的时候进行负载均衡(默认是 false)
    set hive.groupby.skewindata = true;
    当选项设定为 true,生成的查询计划会有两个 MR Job。

    2 Join 数据倾斜优化

    2.1 使用参数

    在编写 Join 查询语句时,如果确定是由于 join 出现的数据倾斜,那么请做如下设置:
     
    # join 的键对应的记录条数超过这个值则会进行分拆,值根据具体数据量设置
    set hive.skewjoin.key=100000;
    # 如果是 join 过程出现倾斜应该设置为 true
    set hive.optimize.skewjoin=false;
    如果开启了,在 Join 过程中 Hive 会将计数超过阈值 hive.skewjoin.key(默认 100000)的
    倾斜 key 对应的行临时写进文件中,然后再启动另一个 job 做 map join 生成结果。通过hive.skewjoin.mapjoin.map.tasks 参数还可以控制第二个 job 的 mapper 数量,默认 10000。
    set hive.skewjoin.mapjoin.map.tasks=10000;

    2.2 MapJoin

    详情见 3.9 节
     
     
     

    本文来自博客园,作者:秋华,转载请注明原文链接:https://www.cnblogs.com/qiu-hua/p/15143955.html

  • 相关阅读:
    data:image/png;base64
    需要去了解的知识
    【转】react的高阶组件
    几个css问题
    antd中form中resetFields清空输入框
    react中map循环中key取值问题
    react中父组件调用子组件的方法
    hive 初始化 时间问题 The server time zone value 'EDT' is unrecognized
    centos7安装MySQL8 无法修改密码 无法修改密码策略
    虚拟机 Linux 不能连 xshell 不能上网
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/15143955.html
Copyright © 2011-2022 走看看