Hive优化总结


1.小表大表join(MapJOIN):使用map join 让小的维度表先进内存,在map端完成join

set hive.auto.convert.join = true; 默认为true

set hive.mapjoin.smalltable.filesize=25000000;默认25M以下是小表

2.大表join大表:

(1)空key过滤:一般业务场景不常用

(2)空key转换:nvl(n.id,rand()) = o.id; 将空key转为随机值,进不同的reducer

(3)SMB:分桶 桶的个数不要超过可用CPU的核数

clustered by(id)  ---建表条件

sorted by(id)

into 6 buckets

set hive.optimize.bucketmapjoin = true;

set hive.optimize.bucketmapjoin.sortedmerge = true;

set hive.input.format=org.apache.hadoop.hive.ql.io.BucketizedHiveInputFormat;

3.Group By:很多操作可用先在Map端进行部分聚合

开启Map端聚合参数设置

set hive.map.aggr = true; 开启在Map端进行聚合。默认为True

set hive.groupby.mapaggr.checkinterval = 100000; Map端进行聚合操作的条目数目

set hive.groupby.skewindata = true; 有数据倾斜的时候进行负载均衡(默认是false)

4.Count(Distinct) 去重统计:distinct 只用一个Reduce Task来完成。可用group by来替代去重操作

5.避免笛卡尔积

hive.strict.checks.cartesian.product

6.行列过滤:尽量不要select *。优化子查询,先过滤再关联

7.设置分区

8.设置分桶

9.合理设置Map和Reduce数目

合理设置Map数目

(1)computeSliteSize(Math.max(minSize,Math.min(maxSize,blocksize)))=blocksize=128M公式,调整maxSize最大值。让maxSize最大值低于blocksize就可以增加map的个数。

(2)小文件进行合并

在map-only任务结束时合并小文件,默认true

SET hive.merge.mapfiles = true;

在map-reduce任务结束时合并小文件,默认false

SET hive.merge.mapredfiles = true;

合并文件的大小,默认256M

SET hive.merge.size.per.task = 268435456;

当输出文件的平均大小小于该值时,启动一个独立的map-reduce任务进行文件merge

SET hive.merge.smallfiles.avgsize = 16777216;

合理设置Reduce个数

(1)每个Reduce处理的数据量默认是256MB

hive.exec.reducers.bytes.per.reducer=256000000

(2)每个任务最大的reduce数,默认为1009

hive.exec.reducers.max=1009

(3)计算reducer数的公式

N=min(参数2,总输入数据量/参数1)

10.并行执行

set hive.exec.parallel=true;//打开任务并行执行

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一.常用参数 开启中间结果压缩 对于输入数据量有少许减少,但是cpu开销增大,对于单stage任务总体不理想 s...
    HenlyX阅读 3,907评论 0 0
  • 小文件问题的影响1.从Hive的角度看,小文件会开很多map,一个map开一个JVM去执行,所以这些任务的初始化,...
    JayWolf阅读 5,733评论 0 0
  • Hive基础 Hive简介:(1)hql相对于MR程序没有复杂的代码,上手简单,会写sql的同学,hql也不在...
    Reyn_93阅读 7,156评论 0 5
  • Hive优化 今天的主要内容——Hive优化 Fetch抓取Hive 中对某些情况的查询可以不必使用 MapRed...
    须臾之北阅读 4,966评论 0 3
  • Tez的Group管理 tez.grouping.min-size 默认50Mtez.grouping.max-s...
    liuzx32阅读 8,673评论 0 0