史诗级hive性能调优--建表与存储格式的选择

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;

熟悉的存储格式:TextFileSequenceFileRCFileAvroORCParquetFile等。

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 ,不仅降低存储量,还优化了查询,压缩,表关联等性能。
 
 
 
 

 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值