热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Hive文件存储格式(TEXTFILE、ORC、PARQUET三者的存储格式的压缩对比和查询速度对比)

综述:HIve的文件存储格式有四种:TEXTFILE、SEQUENCEFILE、ORC、PARQUET,前面两种是行式存储,

综述:

HIve的文件存储格式有四种:TEXTFILE SEQUENCEFILEORC、PARQUET,前面两种是行式存储,后面两种是列式存储;所谓的存储格式就是在Hive建表的时候指定的将表中的数据按照什么样子的存储方式,如果指定了A方式,那么在向表中插入数据的时候,将会使用该方式向HDFS中添加相应的数据类型,关于行列存优劣势可以查看设计数据密集型应用(一)

ORC 是Rcfile的优化版,即Optimize Rcfile,Rcfile基于Lazy Decompression

如果为textfile的文件格式,直接load就OK,不需要走MapReduce;如果是其他的类型就需要走MapReduce了,因为其他的类型都涉及到了文件的压缩,这需要借助MapReduce的压缩方式来实现

总结:

 比对三种主流的文件存储格式TEXTFILE ORCPARQUET

压缩比:ORC >  Parquet >  textFile(textfile没有进行压缩)

查询速度:三者几乎一致


案例证明:

1,textfile,创建表,存储数据格式为TEXTFILE
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'
stored as textfile ;向表中加载数据load data local inpath '/opt/module/datas/log.data' into table log_text ;
查看表中数据大小这个过程不会走MapReduce,而是直接将文件上传到了HDFS,在HDFS上文件的名字还叫log.data
dfs -du -h /user/hive/warehouse/db_hive.db/log_text;
18.1 M /user/hive/warehouse/db_hive.db/log_text/log.data2,ORC,创建表,存储数据格式为ORC
create table log_orc(
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'
stored as orc ;向表中加载数据
insert into table log_orc select * from log_text ;查看表中数据大小
这个过程要走MapReduce,而且文件是按照列式存储的,还会对文件进行压缩,Orc默认使用的压缩方式是
zlib因此会更加节省空间,hadfs上是新的文件名,hive (db_hive)> dfs -du -h /user/hive/warehouse/db_hive.db/log_orc;
2.8 M /user/hive/warehouse/db_hive.db/log_orc/000000_03,Parquet,创建表,存储数据格式为parquet
create table log_parquet(
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'
stored as parquet ; 向表中加载数据
insert into table log_parquet select * from log_text ;查看表中数据大小这个过程要走MapReduce,而且文件是按照列式存储的,因此会更加节省空间,
hadfs上是新的文件名,
hive (db_hive)> dfs -du -h /user/hive/warehouse/db_hive.db/log_parquet;
13.1 M /user/hive/warehouse/db_hive.db/log_parquet/000000_0存储文件的压缩比总结:
ORC > Parquet > textFileselect count(*) from log_text;select count(*) from log_orc;select count(*) from log_parquet;存储文件的查询速度总结:查询速度相近。

压缩和存储的结合:

在建表的时候,如果我们指定了列式存储的方式,他会默认使用对于的压缩方式将我们的数据进行压缩,与此同时我们能够自己定制在文件存储的时候使用什么样子的压缩方式,例子如下:

1.创建一个非压缩的的ORC存储方式
create table log_orc_none(
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'
stored as orc tblproperties ("orc.compress"="NONE");
插入数据
hive (default)> insert into table log_orc_none select * from log_text ;2.创建一个SNAPPY压缩的ORC存储方式
create table log_orc_snappy(
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'
stored as orc tblproperties ("orc.compress"="SNAPPY");
插入数据
hive (default)> insert into table log_orc_snappy select * from log_text ;3.创建一个默认压缩的ORC存储方式
create table log_orc(
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'
stored as orc ;向表中加载数据
insert into table log_orc select * from log_text ;对比三者的压缩比:hive (db_hive)> dfs -du -h /user/hive/warehouse/db_hive.db/log_orc_none;
18.1 M /user/hive/warehouse/db_hive.db/log_orc_none/log.datahive (db_hive)> dfs -du -h /user/hive/warehouse/db_hive.db/log_orc_snappy;
3.8 M /user/hive/warehouse/db_hive.db/log_orc_snappy/000000_0hive (db_hive)> dfs -du -h /user/hive/warehouse/db_hive.db/log_orc;
2.8 M /user/hive/warehouse/db_hive.db/log_orc/000000_0总结:
没有压缩的orc格式相当于textfile,默认的压缩格式压缩比最大,snappy对数据进行了压缩
orc存储文件默认采用ZLIB压缩,ZLIB采用的是deflate压缩算法。因此比snappy压缩的小。
文件没有压缩的话,HDFS上显示的是原来的文件名,如果压缩的话,使用类似于000000_0的文件名

总结:


比对三种主流的文件存储格式TEXTFILE ORCPARQUET

压缩比:ORC(ZLIB压缩) >  Parquet (Uncompress即默认不压缩)>  textFile(textfile不压缩)

查询速度:三者几乎一致

HDFS上显示的是原来的文件名,如果压缩的话,使用类似于000000_0的文件名

更多高质文章欢迎大家关注博主的公众号:stackoverflow


推荐阅读
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
author-avatar
用户tznpaynnl5
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有