Hive 性能调优

  • 避免执行MR
    • select * or select field1,field2
    • limit 10
    • where语句中只有分区字段或该表的本地字段
    • 使用本地set hive.exec.mode.local.auto=true;


  • EXPLAIN的使用
    hive对sql的查询计划信息解析
    EXPLAIN SELECT COUNT(1) FROM T_TABLE;
    EXPLAIN EXTENDED SELECT COUNT(1) FROM T_TABLE;(更为详细)


  • 本地MR(提高本地资源利用率,一般在测试时使用)
    • 本地模式设置
      set mapred.job.tracker=local;
      set hive.exec.mode.local.auto=true; (开启自动本地模式)
      set hive.exec.mode.local.auto.inputbytes.max(默认134217728,设置local mr的最大输入数据量,当输入数据量小于这个值的时候会采用local mr的方式)
      set hive.exec.mode.local.auto.input.files.max (默认是4,
      设置local mr的最大输入文件个数,当输入文件个数小于这个值的时候会采用local mr的方式)


  • 开启并行计算
    set hive.exec.parallel=true; (增加集群利用率)

  • 设置严格模式
    set hive.mapred.mode=strict | nostrict;

    strict可以禁止三种类型的查询

    1、分区表必须使用 where 分区条件过滤
    这里写图片描述

    2、Order by语句必须使用 limit
    这里写图片描述

    3、限制笛卡尔积查询


  • 调整mapper和reducer的数量
    • 太多map导致启动产生过多开销
    • 按照输入数据量大小确定reducer数目,
      • set mapred.reduce.tasks= 默认3
      • dfs -count /分区目录/*
      • hive.exec.reducers.max设置阻止资源过度消耗


  • JVM重用

    set mapred.job.reuse.jvm.num.task=10 (会一直占用task槽,占用内存)

  • 排序语句

    order by : 全局排序
    sort    by : 是单reduce排序
    distribute by : 分区字段排序;

    sort by distribute by 配合使用(相同数据会被分发到同一个reduce上,类似order by)
    select id from t_bucket distribute by id sort by id desc limit 10;
    cluster by
          可以确保类似的数据的分发到同一个reduce task中,并且保证数据有序防止所有的数据分发到同一个reduce上,导致整体的job时间延长

    cluster by语句的等价语句
    distribute by idsort by id == cluster by

  • Map-side聚合

    set hive.map.aggr=true;
    这个设置可以将顶层的聚合操作放在Map阶段执行,从而减轻清洗阶段数据传输和Reduce阶段的执行时间,提升总体性能。

    该设置会消耗更多的内存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值