hive调优相关操作

一.hive参数设置

hive参数设置范围:配置文件参数>命令行参数>set参数声明

hive参数设置优先级:set参数声明>命令行参数>配置文件参数

注意:一般执行SQL需要指定的参数,都通过set参数声明,因为它属于临时设置,断开就失效了

1.hive数据压缩

大部分会选择通过snappy来压缩,因为它可以在合理的压缩比例下有较高的解压缩速度.

2.行列存储的优缺点

行存储:textfile和squencefile

优点:select * from 表名;相对比较快,比较符合面向对象的思维,因为一行数据就是一条记录,所以比较合适insert,update插入和更新数据.

缺点:如果只涉及到几个列的查询,会把整行数据读取出来,在数据量较大的时候会影响性能.

每一行的列字段类型不一样,不容易压缩,空间利用率不高.select 字段名 from 表名;相对比较慢

列存储:ORC和parquet

优点:select 字段名 from 表名;相对比较快

查询时,只有被涉及到的列才会查询出来,可以跳过不必要的列

高效的压缩率,节省存储空间以及计算内存和CPU

注意:orc内置一种压缩算法:zlib,实际中会将ORC压缩算法替换为snappy,格式为stored as orc tblproperties ("orc.compress"="SNAPPY")

3.fetch抓取

核心点:执行SQL时,能不走MR,尽量不走MR

正常:全表扫描,查询列数据,简答查询,limit操作不走MR

三种模式:more,minimal,none

4.本地模式

核心点:MR能走本地模式,尽量走本地MR

默认关闭,set hive.exec.mode.local.auto=true; 

5.join的优化操作

小表和大表join:通过map端join,提升效率和避免数据倾斜

大表和大表join:在join前通过where过滤数据,从而提升效率,可以通过null值替换为随机数,减少数据倾斜.

6.sql优化

列裁剪:Hive在读数据的时候,可以只读取查询中所需要用到的列,而忽略其他列

分区裁减:如果操作的表是一张分区表, 那么建议一定要带上分区字段, 以减少扫描的数据量, 从而提升效率.

group by操作:通过map端聚合,有数据倾斜的时候开启负载均衡.set hive.groupby.skewindata = true;

count(distinct):利用group by替换distinct提升效率

笛卡尔积:

1) 避免join的时候不加on条件,或者无效的on条件
2) 关联条件不要放置在where语句, 因为底层, 先产生笛卡尔积 然后基于where进行过滤 , 建议放置on条件上
3) 如果实际开发中无法确定表与表关联条件 建议与数据管理者重新对接, 避免出现问题

7.动态分区

在创建分区表时可以不指定分区目录名称,通过已有的分区表创建.

8.MapReduce并行度调整

1).不是map越多越好,一个任务有很多小文件时,每个小文件会被当做一个块,用一个map任务来完成,map任务启动和初始化的时间远远大于逻辑处理的时间,造成资源浪费,而且map可执行数是受限的,

2)是不是每个map处理接近128m的文件块,就没问题了?

如果一个文件只有1,2列字段,但有几千万个记录,用一个map任务去做就会比较耗时.

3)是不是Reduce越多越好?

过多的启动和初始化reduce也会消耗时间和资源

有多个reduce就有多少个文件,如果生成了很多了小文件,作为下一个任务的输入,就会造成小文件过多的问题.

什么情况下只有一个reduce:order by,执行不需要group by直接聚合的操作,笛卡尔积

8.并行执行

让独立的MR程序同时执行,正常是一个一个来

9.严格模式

限制一些效率极低的SQL

order by不加limit,出现笛卡尔积现象,查询分区表不加分区字段

10.JVM重用

让container容器可以重复使用

11.推测执行

通过规则推算出拖后腿任务,对任务进行备份操作,让备份任务和原始任务同时处理一份数据,最终选用先完成任务的计算结果.

10.执行计划EXplain

使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。帮助我们了解底层原理,hive调优,排查数据倾斜等有很有帮助 

使用示例:explain [...]  sql查询语句;

explain sql语句: 查看执行计划的基本信息

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值