欢迎投稿

今日深度:

hive(二)--hive优化,

hive(二)--hive优化,


一.  查询优化 
  1) 查看hql的mapreduce过程
     EXPLAIN  [EXTENDED]  select count(1) from testa
  2) limit的查询抽样
set hive.limit.optimize.enable=true;
set hive.limit.row.max.size=10000;
set hive.limit.optimize.limit.file=10;
  3) join优化 : 小表在左面, 减少reduce阶段
  4) 优先本地进行mapreduce
      优先让能够在本台机器上运行的job , 不去提交job到hadoop集群
 set hive.exec.mode.local.auto=true;
  5) 并行执行 : set hive.exec.parallel=true;
  6) 严格查询 : 
        set hive.mapred.mode=strict;
        注:使用严格模式可以禁止 3 种类型的查询:
(1)对于分区表,不加分区字段过滤条件,不能执行
   (2)对于 order by 语句,必须使用 limit 语句。
   (3)限制笛卡尔积的查询( join 的时候必须使用on )。
   7) 调整reducer个数 : 
      1. map的个数有输入数据的大小决定 : 
   由以下几个参数确定的: mapred.min.split.size  ,mapred.max.split.size ,dfs.block.size
      2. reduce个数默认是3个. 当map的个数太多, 会导致reduce个数过多, 占满集群的reducer数量
       set hive.exec.reducers.max=( 集群总 reduce 槽位个数 *1.5)/( 执行中的查询的平均个数 ) 

8) JVM重用 (1个main函数就启动了一个JVM)
  hadoop的每个map, reduce任务都会启动一个JVM来执行. 当一个job包含多个mapreduce任务时, 会启动多个jvm执行. jvm启动的时间累计会过长
  可以设置一个JVM中执行多个map, reduce任务
  hadoop配置文件 : mapred-site.xml 文件  mapred.reuse.num.tasks = 个数
  
9) group by 优化 
  1. 使用索引加快group by子句
           位图索引针对大量有相同值的列进行索引.
   CREATE INDEX employeeIndex ON TABLE employees(age)  AS 'BITMAP'

  2. 单个map reduce执行多个对相同列分组的group by任务
      hive.multigroupby.singlemer = false 

10) 动态分区插入优化
   insert into ... partition() select .. from 会动态建立查到的所有分区, 分区过多,会使得mapreduce处理划分输出流开效过大.
可以通过参数限制动态分区插入建立的分区数

hive.dynamic.partition.mode = strict  // 严格模式: 必须有一个静态分区
hive.exec.max.dynamic.partitions = 30000 // 允许建立的分区最大个数
hive.exec.max.dynamic.partitions.pernode = 1000  //一次mapreduce穿件的分区数

11)开启推测执行
   推测执行 :  当某一个map,reduce任务耗时超过平均任务耗时, 会启动一个新job执行这个mapreduce, 那个先执行完, 那个先返回结果
hive.mapred.reduce.tasks.speculative.execution = true

    12) hive内置的虚拟列
  hive.exec.rowoffset = true  开启虚拟列查询
  input_file_name , block_offset_inside_file 

www.htsjk.Com true http://www.htsjk.com/hive/30051.html NewsArticle hive(二)--hive优化, 一.  查询优化    1) 查看hql的mapreduce过程      EXPLAIN  [EXTENDED]  select count(1) from testa   2) limit的查询抽样 set hive.limit.optimize.enable=true; set hive.limit.row.max.size=10000; se...
相关文章
    暂无相关文章
评论暂时关闭