Hive
调优的作用:在保证业务结果不变的前提下,降低资源的使用量,减少任务的执行时间。
影响
Hive
效率的几
乎从不是数据量过大,而是数据倾斜、数据冗余、
Job
或
I/O
过多、
MapReduce
分配不合理等等
。
对 Hive 的调优既包含
Hive
的建表设计方面,对
HiveHQL
语句本身的优化,也包含
Hive
配置参数 和 底
层引擎
MapReduce
方面的调整。
一、建表优化
利用分区表进行优化
当一个 Hive 表的查询大多数情况下,会根据某一个字段进行筛选时,那么非常适合创建为 分区表,该字段即为分区字段。
1
、当你意识到一个字段经常用来做
where
,建分区表,使用这个字段当做分区字段
2
、在查询的时候,使用分区字段来过滤,就可以避免全表扫描。只需要扫描这张表的一个分区的数据即可
创建分区表
CREATE TABLE page_view(viewTime INT, userid BIGINT, page_url STRING, referrer_url STRING, ip STRING COMMENT 'IP Address of the User') PARTITIONED BY(date STRING, country STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '1' STORED AS TEXTFILE;
将数据load进分区表里
load data local inpath '/home/bigdata/pv_2018-07-08_us.txt' into table page_view partition(date='2018-07-08', country='US');
利用分桶表优化
想要提高join效率可以建分桶表
两个表以相同方式(相同字段)划分桶,两个表的桶个数是倍数关系
建表语句:
CREATE TABLE page_view (
viewTime INT,
userid BIGINT,
page_url STRING,
referrer_url STRING,
ip STRING COMMENT 'IP Address of the User'
) COMMENT 'This is the page view table'
PARTITIONED BY(dt STRING, country STRING) CLUSTERED BY(userid) SORTED BY(viewTime) INTO 32 BUCKETS ROW FORMAT DELIMITED FIELDS TERMINATED BY '1' COLLECTION ITEMS TERMINATED BY '2' MAP KEYS TERMINATED BY '3' STORED AS SEQUENCEFILE;
CLUSTERED BY(userid)
SORTED BY(viewTime) INTO 32 BUCKETS
CLUSTERED BY(userid) 表示按照 userid 来分桶
SORTED BY(viewTime) 按照viewtime来进行桶内排序
INTO 32 BUCKETS 分成多少个桶
OLAP(压秒级响应):列存储+范围分区+排序+索引+压缩+预计算+数据倾斜
选择合适的存储格式
hive的默认存储格式:textfile
举例:表有50个字段
select department count(*) as total from student group by department;
熟悉的存储格式:TextFile、SequenceFile、RCFile、 Avro、ORC、ParquetFile等。
textfile:
1
、存储方式:行存储。默认格式,如果建表时不指定默认为此格式。,
2
、每一行都是一条记录,每行都以换行符
"\n"
结尾。数据不做压缩时,磁盘会开销比较大,数据解析开销也
比较大。
3
、可结合
Gzip
、
Bzip2
等压缩方式一起使用(系统会自动检查,查询时会自动解压)
,
推荐选用可切分的压
缩算法。
Sequence File (中间存储)
1
、一种
Hadoop API
提供的二进制文件,使用方便、可分割、个压缩的特点。
2
、支持三种压缩选择:
NONE
、
RECORD
、
BLOCK
。
RECORD
压缩率低,一般建议使用
BLOCK
压缩。
RC File
1
、存储方式:数据按行分块,每块按照列存储 。
A
、首先,将数据按行分块,保证同一个
record
在一个块上,避免读一个记录需要读取多个
block
。
B
、其次,块数据列式存储,有利于数据压缩和快速的列存取。
2
、相对来说,
RCFile
对于提升任务执行性能提升不大,但是能节省一些存储空间。可以使用升级版的
ORC
格
式。
ORC File(rcfile的升级版本)
1
、存储方式:数据按行分块,每块按照列存储
2
、
Hive
提供的新格式,属于
RCFile
的升级版,性能有大幅度提升,而且数据可以压缩存储,压缩快,快速
列存取。
3
、
ORC File
会基于列创建索引,当查询的时候会很快。
Parquet File (常用的列式存储)
1
、存储方式:列式存储。
2
、
Parquet
对于大型查询的类型是高效的。对于扫描特定表格中的特定列查询,
Parquet
特别有用。
Parquet
一般使用
Snappy
、
Gzip
压缩。默认
Snappy
。
3
、
Parquet
支持
Impala
查询引擎。
4
、表的文件存储格式尽量采用
Parquet
或
ORC
,不仅降低存储量,还优化了查询,压缩,表关联等性能。