Hive调优

Hive调优

参数配置

  1. 设置hive参数(三种方式)

    1. 配置hive文件

      1
      2
      3
      a)用户自定义配置文件:$HIVE_CONF_DIR/hive-site.xml 
      b)默认配置文件:$HIVE_CONF_DIR/hive-default.xml.template
      # 当用户自定义配置后,会覆盖默认配置。
      1. 全局性,对所有hive进程
      2. hive的配置会覆盖Hadoop的配置,因为hive在客户端上运行
    2. 命令行参数配置

      1. hive –service hiveserver2 –hiveconf 配置=参数

        1
        hive --service hiveserver2 --hiveconf hive.root.logger=DEBUG,console
      2. 仅在当前会话内有效

    3. 设置参数声明(推荐)

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      -- 查看
      set 配置;

      -- 设定参数
      set 配置=参数;

      1、参数设置优先级
      参数声明-->命令行参数--> 配置文件参数
      2、参数设置范围
      配置文件-->命令行参数--> 参数声明

      -- 查看
      set hive.exec.rowoffset;
      -- 设置开启数据在hdfs偏移量显示
      set hive.exec.rowoffset=true;
      -- 查看
      set mapreduce.job.reduces;
      -- 设定reduce数量
      set mapreduce.job.reduces = 3;
  2. 设定Fetch抓取策略

    1. 避免执行mapreduce
      1. 全表扫描
      2. 查询某一列
      3. 执行简单查询操作
      4. 执行limit
    2. 原理
      1. $ hive.fetch.task.conversion = more$ 可以保证在全表扫描、字段查找、简单查询、limit不走MR
      2. $ hive.fetch.task.conversion = minimal$ 保证执行全表扫描以及查询某几个列以及limit操作可以不走MR, 其他操作都会执
        行MR
      3. $ hive.fetch.task.conversion = none$ 全部都执行MR
  3. 设定本地模式

    1. Hive可以通过本地模式在单台机器上处理所有的任务。而对于小数据集,执行时间可以明显被缩短

      1
      2
      3
      4
      5
      6
      -- 开启本地local mr   , 默认为false
      set hive.exec.mode.local.auto=true;
      -- 设置local mr的最大输入数据量,当输入数据量小于这个值时采用local mr的方式,默认为134217728,即128M
      set hive.exec.mode.local.auto.inputbytes.max=134217728;
      -- 设置local mr的最大输入文件个数,当输入文件个数小于这个值时采用local mr的方式,默认为4
      set hive.exec.mode.local.auto.input.files.max=4;
  4. 数据压缩格式

    1. 优势

      1
      2
      3
      (1)便于集中处理;
      (2)便于资料传输;
      (3)便于阅读数据
    2. mapreduce支持的压缩格式

      image-20230916172159137

    3. 设定压缩方案

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      -- 开启hive支持中间结果的压缩方案
      set hive.exec.compress.intermediate = true

      -- 开启hive支持最终结果压缩
      set hive.exec.compress.output = true

      --开启MR的mapper端压缩操作
      set mapreduce.map.output.compress=true;
      --设置mapper端压缩的方案
      set mapreduce.map.output.compress.codec=
      org.apache.hadoop.io.compress.SnappyCodec;
      -- 开启MR的reduce端的压缩方案
      set mapreduce.output.fileoutputformat.compress=true;
      -- 设置reduce端压缩的方案
      set mapreduce.output.fileoutputformat.compress.codec =
      org.apache.hadoop.io.compress.SnappyCodec;
      --设置reduce的压缩类型
      set mapreduce.output.fileoutputformat.compress.type=BLOCK;
  5. 数据存储格式

    image-20230916154745637

    1. 行式存储

      1. TEXTFILE:存储方式为行存储
        1. 相关数据保存在一起,一行数据就是一条记录
        2. 缺点是,不能只取几列,不能跳过不必要的列
    2. 列式存储

      1. ORC:数据按行分块,每块按照列存储
        1. 可以只查询需要的列
        2. 压缩效率较高
        3. 缺点是insert和update很麻烦
      2. PARQUIT
    3. 建表语句

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      create [external] table 表名(
      字段名 字段类型,
      字段名 字段类型,
      ...
      )
      [row format delimited
      fields terminated by '指定分隔符']
      [stored as textfile] -- 行式存储格式 18.1M
      [stored as parquet] -- 列式存储格式 13.1M
      [stored as orc]; -- 列式存储格式 2.8M

      -- 导入数据
      insert into table tb_col_parquet select * from taobao_log;