Hive性能优化简介 (顺便介绍了性能工具--ANALYZE)

ANALYZE关键字可以收集数值统计信息。

加速查询,直接从统计信息中拿,而不会再启动mapreduce去查询。

用desc命令去查统计信息。

Hive性能优化包含以下点:

partition table 这是最好的优化,比如用年月日,部门

联合查询,可以先按xx做分区,再按别的做分区

bucket table 

经常被join连接查询的这种column上建立bucket

这才能提高查询效率

index

每当数据更新时,也要去更新索引,所以维护成本也不小。

实际用的比较少。

几种好用的数据类型,

orc ,parquet等,都是基于列的,所以查询性能非常高。

(数据过滤等经常用)

数据压缩

第一,可以减少很多空间。

第二,数据shuffle过程中传输速度也会变快。

但是压缩了也要解压,所以也不能压缩的太狠。

有专门的算法叫snappy  用于快速压缩,压缩比适中。

data localization

处理引擎放到另一个集群。。。

数据和算法尽量不分离,

比如说我hadoop我把三个拷贝增加到六个拷贝。

(这点不太懂)

Avoid small files

为什么使用动态分区会对集群产生不好的影响(产生小文件)?(间接问法)

避免存放太多小文件,原因如下:

1. 因为每个文件都会产生元数据存在namenode的内存。

namenode资源被过多消耗,性能会受到很大影响。

2. 因为block size是比较大的,文件虽然小,但是小文件增大后占的blocksize会越来越多。

解决方法:

1.多进行合并,有一些自动合并功能。没有用hive时,写第三方mapreduce job来合并。

2.多生成大文件的数据源再发给hadoop

Hive

可以用TEZ engine来代替mapreduce,它本质是mapreduce的最佳实践。

性能很高。

使用Hive LLAP

Hive2.0后 LLAP优化,在后台启动一个长久的线程,不会为每次查询再启动。

数据通过缓存来获得,而不是所有结果都直接去查询。

Hive transaction

不必要就不要建立事务,

很消耗资源

除非你有特殊需求。

猜你喜欢

转载自blog.csdn.net/u011495642/article/details/84331224