Hive存储格式对执行效率的影响

Hive存储格式对执行效率的影响,第1张

Hive存储格式对执行效率的影响

新世界来的像梦一样,让我暖洋洋

Hive支持的存储方式

hive支持的存储方式有很多,在平常的练习中,用的最多的还是textfile.

在本篇博客中,不会过度的去讲解每个存储格式的特点以及存储格式的讲解。会通过案例来讲解各个不用存储方式和压缩的情况下,对我们查询数据以及存储空间的影响。

因为orc存储格式或者parquet格式不能直接load ,所以我们一般都是先创建一个存储格式为text的临时表,通过 insert into 表 select * from 临时表

目标表:log_orc ORC存储
 临时表:log_text textfile
 insert into table log_orc select * from log_text

上面的图片是创建Log_text的建表语句。

但是平常建表的时候并不用写这么详细,举个例子,上面那个表。

create table log_text(
track_time string,
url string, 
session_id string,
referer string,
ip string, 
end_user_id string,
city_id string) 
row format delimited
fields terminated by 't' 


load data local inpath ' ' into table log_text

我们创建Log_text表的时候是这样子创建的,上面那个图片是将我们的建表语句标准化。可以看到很多有用的信息,这个表的数据储藏在哪里,用的inputformat和outputfofrmat又是什么。

跟据上面的例子,我们再创建log_orc和log_parquet表

 

 

在三个建表语句中,不同的存储格式,有不同的输入输出格式以及不同的序列化。

如果学过mapreduce,那么对于这个也不是特别的陌生,写完map 和 reduce程序后,在Main方法里面就是来配置这些信息,用的是什么Inputformat和outputformat。hive就是将sql转化为Mr的算子,不会使用mr算子没有关系,只需要懂Hive我们依旧可以对数据进行mr式的处理。

不同的存储带来不同的空间:

使用命令行,可以查看相应的表所占的存储空间

可能会有人看不懂,怎么会有三个参数

参数一:该目录下所占的存储空间

参数二:占的总存储空间(hdfs 备份。比如,副本参数为3,8.3 = 2.8 * 3),也就是第二个参数是第一个参数的三倍。至于是几倍,取决与hadoop集群的副本个数

log_orc占的存储空间为2.8M

log_parquet占的存储空间为13.1M

 

log_text占的存储空间为18.1M

如果知道一些orc和parquet的话,可以知道orc是rcfile的升级版本,parquet是行列式存储,Sequence是hadoop自己就支持的二进制文件格式。

综上所述:存储效率的排序如下

orc > parquet > text

存储格式对查询速率的影响:

不同的存储格式对查询是有不同的影响的,首先不同的存储格式就会对底层有不同的影响,二进制文件,行式存储,列式存储都会有影响,而且orc和parquet这种文件存储格式都会自己存储一些表的信息,比如有多少行,多少个数据之类的

下面看主题

通过count(*)来进行评判

对log_orc的表进行分析,发现没有走mr程序,直接就输出结果

对log_parquet的表进行分析,发现也没有走mr程序,直接输出结果

对log_text的表进行分析,发现走mr程序了,并且耗时将近16s。10万条数据

为什么log_orc和log_parquet进行count的时候没有走mr,而log_text走了mr。原因很简单,orc和parquet这些文件存储格式会自己附带一些表的信息,比如表有多少行,最大值或者最小值。会附加一些信息。所以会造成在进行一些需要走mr的sql的时候,没有走mr。

对orc存储格式进行压缩分析

hive可以对输入的文件和输出的文件进行压缩。对输入的文件进行压缩,可以理解为在map段进行压缩,对输出文件进行压缩,可以理解为对reduce进行压缩。

如何查看hive支持的压缩:

1.通过配置Hadoop的配置文件. core-site.xml文件

2.通过Hive命令行,set io.compression.codecs

可以看到支持gzip,bzip,snappy,lzo和默认的default压缩算法

在orc文件存储格式里面,有三种压缩方式:

  1. NoNe 对orc文件不进行压缩

 

        在无压缩格式下的存储空间为7.7M

        

 

 


ZLIB 默认的压缩

 

        默认的存储压缩 ZLIB下的存储空间

        2.8M


snappy 压缩

 

        snappy存储压缩下的存储空间

        3.7M

ORC文件中压缩效率

默认压缩>snappy>none

明天会更新hive执行计划的详解以及sql进阶之类的一些东西。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5699936.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存