• 表优化


    1.小表、大表join
    将key相对分散,并且小表放在join左边,减少内存溢出的几率,也可以用mapjoin让小表先进内存,在map端完成reduce。
    新版hive已经对这做了优化,大小表在join左边或者右边差不多

    2.大表join大表

    • 空key过滤
      join操作在相同key数据太多时会将数据都发往相同的reducer上,导致内存不足。解析异常key,减少异常数据
    • 空key转换
      如果空key对应的数据不是异常数据,则要为空key的字段赋一个随机的值,使得数据随机均匀地分不到不同的reducer上

    3.mapjoin

    • 开启mapjoin
    set hive.auto.convert.join=true;
    
    • 大表小表的阈值设置(默认25m以下认为是小表)
    set hive.mapjoin.smalltable.filesize=25000000;
    

    4.Group by

    • 开启Map端聚合
    set hive.map.aggr =true;
    
    • 有数据倾斜的时候进行负载均衡
    set ive.groupby.skewindata=true
    

    5.Count(Distinct)去重统计
    count distinct操作需要一个reduce task来完成,使得这个reducer需要处理的数据很大,一般count distinct使用先group by 再count的方式替换

    6.笛卡尔积
    尽量避免使用笛卡尔积,join的时候不加on条件,或者无效的on条件,hive只能用1个reducer完成笛卡尔积

    7.动态分区

    • 开启动态分区
    set hive.exec.dynamic.partition=true
    
    • 设置非严格模式(严格模式下,必须指定至少一个分区为静态分区,非严格模式表示允许所有的分区字段都可以使用动态分区)
    set hive.exec.dynamic.partition.mode=nonstrict
    
    • 在所有执行MR的节点上,最大可以创建多少个动态分区
    set hive.exec.max.dynamic.partitions=1000;
    
    • 在每个MR执行节点上,最大可以创建多少分区
    set hive.exec.max.dynamic.partitions.pernode=100;
    

    8.并行优化
    hive会将一个查询转化成一个或多个阶段,例如mr阶段、抽样阶段、合并阶段、limit阶段。如果一个job的这些阶段不是完全依赖的,可以并行执行这些阶段。

    set hive.exec.parallel=true; //开启并行执行
    set hive.exec.parallel.thread.number=16;//同一个sql允许最大并行度,默认为8
    

    9.严格模式
    默认是nonstrict模式
    打开严格模式

    set hive.mapred.mode=strict;
    
    • 对于分区表,除非where语句中含有分区字段过滤条件来限制范围,否则不允许执行。即不允许扫描所有分区
    • 对于使用order by语句的查询,要求必须使用limit语句
    • 限制笛卡尔积查询

    10.推测执行
    根据一定规则推测拖后腿的任务,启动一个备份任务与原任务同时处理同一份数据,并最终选用最先成功完成任务的计算结果为最终结果
    在hadoop的mapred-site.xml中配置

    <property>
          <name>mapreduce.map.speculative</name>
          <value>true</value>
    </property>
    

    hive也提供了配置来控制reduce-side的推测执行

    <property>
          <name>hive.mapred.reduce.tasks.speculative.execution</name>
          <value>true</value>
    </property>
    
  • 相关阅读:
    csu1022 菜鸟和大牛 dp
    POJ 1001 Exponentiation
    KMPmatch 字符串模式匹配
    UVaOJ458 The Decoder
    UVaOJ 10300 Ecological Premium
    MLE: 找出出现偶数次的那个数
    csu 1207: 镇管的难题
    csu 1079
    UVaOj 494 Kindergarten Counting Game
    轻松掌握Ajax.net系列教程七:使用ModalPopupExtender
  • 原文地址:https://www.cnblogs.com/zqzhen/p/12940722.html
Copyright © 2020-2023  润新知