1.数据压缩
gzip:压缩比与速度都中等,不可切片
bzip:压缩比最大,可切片
lozy:中等,可切片
snappy:压缩速度快,可切片常用
大数据一般选用snappy形式的压缩。
2.数据存储格式
1.默认行存储。gzip存储不可切片。
2.列存储,可切片,可以不从文件的开始读取数据,加快了查询的速速
3.RCfile:结合行列的优点。进行了压缩存储又加快了查询的速度
4.ORfile:RCfile的加强版
5.parquet格式。行式存储。较好的压缩性能,特有的查询机制,减少了序列化与查询的时间。
一般选用ORfile与parquet的格式进行存储
3.建立分区表与桶表
1、分区表相当于hive数据库的索引。在配置中开启使用分区与设置分区的数量。在建立表的时候使用分区,查询的时候进行分区的指定
2、分桶:桶是更为细粒度的划分,是对列的包装。由hash值与分桶数量来确定分桶的编号。分桶原因:
- 对列进行了包装对于join的操作,加快了速度
- 取样测试的时候可在分桶进行,加块了速度
- 可以对指定了的字段进行操作。进行表的拆分。加快速度。
参数设置优化
- hive的0.10版本开始,对于一些不需要聚合的操作,默认的不需要进行MapReduce的操作,配置中修改
- 开启并行执行相互没有依赖的job
- 对于大量小文件的情况,开启jvm的重用。
- 设置reduce的数量,直接指定数量与指定大小进行计算
- 开启推测执行的配置。对于一些工作。长时间没有完成。开启另一个job来执行,直到友有一个job执行完成
sql优化
1.先where后join
select的临时表join另一个表
2.union all后用group by进行去重
3.先查询出结果后进行count的聚合
4.in来代替join
selelct a.a a.b from a1 a join b1 b on (a.id = b.id)
selelct a.a a.b from a1 a where id in (select id from b1)
5.对于子查询内,少使用group by max min
6.参数配置mapjoin 小表连接大表
smbjoin 大表连接大表
数据倾斜
参数调节优化
sql的逻辑优化