Hive调优

1、Fetch 抓取

Fetch 抓取是指,Hive 中对某些情况的查询可以不必使用 MapReduce 计算。
例如: SELECT * FROM employees;在这种情况下,Hive 可以简单地读取employee 对应的存储目录下的文件,然后输出查询结果到控制台。
在 hive-default.xml.template 文件中 hive.fetch.task.conversion 默认是 more,老版本 hive 默认是 minimal,该属性修改为 more 以后,在全局查找、字段查找、limit 查找等都不走mapreduce。

把 hive.fetch.task.conversion 设置成 none,然后执行查询语句,都会执行 mapreduce程序。
把 hive.fetch.task.conversion 设置成 more,然后执行查询语句,
如下查询方式都不会执行 mapreduce 程序

2、本地模式

set hive.exec.mode.local.auto=true  //开启本地模式

要求:默认数据小于128M,默认文件个数小于4,超过则会自动转换为Hadoop模式。也可以自行修改
数据和文件限制。

3、Join表的优化

空key过滤

insert overwrite table jointable
select n.* from nullidtable n left join ori o on n.id = o.id;

insert overwrite table jointable
select n.* from (select * from nullidtable where id is not null ) n //过滤空Key
left join ori o on n.id = o.id;

空Key转换

空key会集中到一个Reduce中,导致数据倾斜

insert overwrite table jointable
select n.* from nullidtable n left join ori b on n.id = b.id;

insert overwrite table jointable
select n.* from 
nullidtable n full join 
ori o 
on
case when n.id is null then concat('hive', rand()) else n.id end //如果o.id为null则分配一个随机数
= o.id;

总体时间会加长,但解决了数据倾斜的问题,保证MR能正常运行

Map Join

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

大表小表的阈值设置(默认 25M 一下认为是小表):
set hive.mapjoin.smalltable.filesize=25000000; //可调高阈值来缩短时间
如果不指定 MapJoin 或者不符合 MapJoin 的条件,那么Hive 解析器会将Join 操作转换成 Common Join,即:在 Reduce 阶段完成 join。
容易发生数据倾斜。可以用 MapJoin 把小表全部加载到内存在 map 端进行 join,避免 reducer 处理。

4、Group By

默认情况下,Map 阶段同一 Key 数据分发给一个 reduce,当一个 key 数据过大时就倾斜了
并不是所有的聚合操作都需要在 Reduce 端完成,很多聚合操作都可以先在 Map 端进行部分聚合,最后在Reduce 端得出最终结果

hive.map.aggr = true    //是否在 Map 端进行聚合,默认为True

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

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

当选项设定为 true,生成的查询计划会有两个MR Job。
第一个MR Job 中,Map 的输出结果会随机分布到 Reduce 中,每个 Reduce 做部分聚合操作,并输出结果,这样处理的结果是相同的 Group By Key 有可能被分发到不同的Reduce 中,从而达到负载均衡的目的;
第二个 MR Job 再根据预处理的数据结果按照 Group By Key 分布到 Reduce 中
(这个过程可以保证相同的Group By Key 被分布到同一个 Reduce 中),最后完成最终的聚合操作

5、去重统计

COUNT DISTINCT (去重统计)使用先 GROUP BY 再 COUNT 的方式替换

select count(distinct id) from bigtable; 

select count(id) from (select id from bigtable group by id) a;

6、行列过滤

列处理:在 SELECT 中,只拿需要的列,如果有,尽量使用分区过滤,*不要用 SELECT ,要用的话加上limit
行处理:在分区剪裁中,当使用外关联时,如果将副表的过滤条件写在 Where 后面,那么就会先全表关联,之后再过滤

7、动态分区

插入数据时,按字段分区【PARTITIONED BY (p_time)】

set hive.exec.dynamic.partition=true   //开启动态分区功能(默认 true,开启)
set hive.exec.dynamic.partition.mode=nonstrict   //设置为非严格模式
set hive.exec.max.dynamic.partitions=1000   //在所有执行 MR 的节点上,最大一共可以创建多少个动态分区
set hive.exec.max.dynamic.partitions.pernode=100 //节点的动态分区

insert into table dept_par partition(deptno)
select deptno,dname,loc from dept;  //发现会按照loc来分区,所以动态分区一定要把分区字段写在最后

8、MR优化

合理设置 Map 数
小文件进行合并
复杂文件增加 适量的Map 数
合理设置 Reduce 数
说的都是P话。。。。

9、并行执行

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

意思是,一堆任务执行时,某一个任务执行得很慢,系统就会再启动一个任务同时执行,先执行完的可以kill慢的进程。

10、严格模式

根据参数得
Cartesian Product. //限制笛卡尔积
No partition being picked up for a query. //除非 where 语句中含有分区字段过滤条件来限制范围,否则不允许执行
Comparing bigints and strings.
Comparing bigints and doubles.
Orderby without limit. //order by必须加limit

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,451评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,172评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,782评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,709评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,733评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,578评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,320评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,241评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,686评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,878评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,992评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,715评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,336评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,912评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,040评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,173评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,947评论 2 355

推荐阅读更多精彩内容