hive文件格式
来源:互联网 发布:浙江省数据开放平台 编辑:程序博客网 时间:2024/06/02 11:03
(一)
hive有textFile,SequenceFile,RCFile三种文件格式。
其中textfile为默认格式,建表时不指定默认为这个格式,导入数据时会直接把数据文件拷贝到hdfs上不进行处理。
SequenceFile,RCFile格式的表不能直接从本地文件导入数据,数据要先导入到textfile格式的表中,然后再从textfile表中用insert导入到SequenceFile,RCFile表中。
create table t2(ra int, dec int, mag int) row format delimited fields terminated by '|' stored as rcfile;
load data local inpath '/home/cq/usnoa/zone0000.asc ' into table t1;
insert overwrite table t2 select * from t1;(begin a job)
File Format
TextFile
SequenceFIle
RCFFile
Data type
Text Only
Text/Binary
Text/Binary
Internal Storage Order
Row-based
Row-based
Column-based
Compression
File Based
Block Based
Block Based
Splitable
YES
YES
YES
Splitable After Compression
No
YES
YES
(二)
hive文件存储格式
1.textfile
textfile为默认格式
存储方式:行存储
磁盘开销大 数据解析开销大
压缩的text文件 hive无法进行合并和拆分
2.sequencefile
二进制文件,以<key,value>的形式序列化到文件中
存储方式:行存储
可分割 压缩
一般选择block压缩
优势是文件和hadoop api中的mapfile是相互兼容的。
3.rcfile
存储方式:数据按行分块 每块按照列存储
压缩快 快速列存取
读记录尽量涉及到的block最少
读取需要的列只需要读取每个row group 的头部定义。
读取全量数据的操作 性能可能比sequencefile没有明显的优势
4.orc
存储方式:数据按行分块 每块按照列存储
压缩快 快速列存取
效率比rcfile高,是rcfile的改良版本
5.自定义格式
用户可以通过实现inputformat和 outputformat来自定义输入输出格式。
总结:
textfile 存储空间消耗比较大,并且压缩的text 无法分割和合并 查询的效率最低,可以直接存储,加载数据的速度最高
sequencefile 存储空间消耗最大,压缩的文件可以分割和合并 查询效率高,需要通过text文件转化来加载
rcfile 存储空间最小,查询的效率最高 ,需要通过text文件转化来加载,加载的速度最低
个人建议:text,seqfile能不用就尽量不要用 最好是选择orc
(三)
SequenceFile的格式
SequenceFile的格式是由一个header 跟随一个或多个记录组成。前三个字节是一个Bytes SEQ代表着版本号,同时header也包括key的名称,value class , 压缩细节,metadata,以及Sync markers。Sync markers的作用在于可以读取任意位置的数据。
在recourds中,又分为是否压缩格式。当没有被压缩时,key与value使用Serialization序列化写入SequenceFile。当选择压缩格式时,record的压缩格式与没有压缩其实不尽相同,除了value的bytes被压缩,key是不被压缩的。(上图中分别展示了无压缩和压缩模式下的record情况)
在Block中,它使所有的信息进行压缩,压缩的最小大小由配置文件中,io.seqfile.compress.blocksize配置项决定。
SequenceFile的MapFile
一个MapFile可以通过SequenceFile的地址,进行分类查找的格式。使用这个格式的优点在于,首先会将SequenceFile中的地址都加载入内存,并且进行了key值排序,从而提供更快的数据查找。
(四)
1. RCFile
RCFile文件格式是FaceBook开源的一种Hive的文件存储格式,首先将表分为几个行组,对每个行组内的数据进行按列存储,每一列的数据都是分开存储,正是先水平划分,再垂直划分的理念。
在存储结构上:
如上图是HDFS内RCFile的存储结构,我们可以看到,首先对表进行行划分,分成多个行组。一个行组主要包括:16字节的HDFS同步块信息,主要是为了区分一个HDFS块上的相邻行组;元数据的头部信息主要包括该行组内的存储的行数、列的字段信息等等;数据部分我们可以看出RCFile将每一行,存储为一列,将一列存储为一行,因为当表很大,我们的字段很多的时候,我们往往只需要取出固定的一列就可以。
在一般的行存储中,使用命令: select a from table,虽然只是取出一个字段的值,但是还是会遍历整个表,所以效果和select * from table 一样,在RCFile中,像前面说的情况,只会读取该行组的一行。
在一般的列存储中,会将不同的列分开存储,这样在查询的时候会跳过某些列,但是有时候存在一个表的有些列不在同一个HDFS块上(如下图),所以在查询的时候,Hive重组列的过程会浪费很多IO开销。
而RCFile由于相同的列都是在一个HDFS块上,所以相对列存储而言会节省很多资源。
在存储空间上:
RCFile采用游程编码,相同的数据不会重复存储,很大程度上节约了存储空间,尤其是字段中包含大量重复数据的时候。
懒加载:
数据存储到表中都是压缩的数据,Hive读取数据的时候会对其进行解压缩,但是会针对特定的查询跳过不需要的列,这样也就省去了无用的列解压缩。
select c from table where a>1
- 1
针对行组来说,会对一个行组的a列进行解压缩,如果当前列中有a>1的值,然后才去解压缩c。若当前行组中不存在a>1的列,那就不用解压缩c,从而跳过整个行组。
2.ORCFile
ORC是在一定程度上扩展了RCFile,是对RCFile的优化。
存储结构上
根据结构图,我们可以看到ORCFile在RCFile基础上引申出来Stripe和Footer等。每个ORC文件首先会被横向切分成多个Stripe,而每个Stripe内部以列存储,所有的列存储在一个文件中,而且每个stripe默认的大小是250MB,相对于RCFile默认的行组大小是4MB,所以比RCFile更高效。
Postscripts中存储该表的行数,压缩参数,压缩大小,列等信息Stripe Footer中包含该stripe的统计结果,包括Max,Min,count等信息FileFooter中包含该表的统计结果,以及各个Stripe的位置信息IndexData中保存了该stripe上数据的位置信息,总行数等信息RowData以stream的形式保存了数据的具体信息
- 1
- 2
- 3
- 4
- 5
Hive读取数据的时候,根据FileFooter读出Stripe的信息,根据IndexData读出数据的偏移量从而读取出数据。
网友有一幅图,形象的说明了这个问题:
存储空间上
ORCFile扩展了RCFile的压缩,除了Run-length(游程编码),引入了字典编码和Bit编码。
采用字典编码,最后存储的数据便是
字典中的值,每个字典值得长度以及字段在字典中的位置
至于Bit编码,对所有字段都可采用Bit编码来判断该列是否为null,
如果为null则Bit值存为0,否则存为1,对于为null的字段在实际编码的时候不需要存储,也就是说字段若为null,是不占用存储空间的。
参考:
http://www.csdn.net/article/2011-04-29/296900
http://blog.csdn.net/dabokele/article/details/51542327
http://blog.csdn.net/dabokele/article/details/51813322
http://www.jdl.ac.cn/user/lyqing/SourceCoding/03_18-Dictionary.pdf
- 顶
- 0
- 踩
- 0
- 上一篇in 和 exist 区别
- 下一篇Hive动态分区
- • Hive的内置服务和hiveserver/hiveserver2的比较
- • 深度学习部署系统构建--刘文志
- • Hiveserver2配置及优化
- • 搜狗机器翻译技术分享--陈伟
- • HiveServer2 入门使用
- • Hadoop生态系统零基础入门
- • Hadoop2.7.2之集群搭建(高可用)
- • 最懂程序员的学习方式 TensorFlow入门
- • Hive hiveserver2 配置运行
- • Retrofit 从入门封装到源码解析
- • Hive的内置服务和hiveserver/hiveserver2的比较
- • 程序员如何转型AI工程师--蒋涛
- • Hadoop-2.7.2(HA)集群的搭建(此环境搭建是在Ubuntu14.04上以root用户进行的)
- • RCFile存储格式
- • hive rcfile存储格式
- • ORCFile存储格式
- Hive文件格式
- Hive文件格式
- Hive文件格式
- Hive文件格式
- Hive文件格式
- hive文件格式
- Hive-4-Hive的文件格式
- hive数据类型和文件格式
- Hive 数据类型 文件格式
- hive的文件格式-RCfile
- Hive文件格式(RCFILE)
- hive学习2-文件格式
- Hive-自定义文件格式
- Hive 4种文件格式
- Hive-数据类型和文件格式
- Hive的文件格式比较
- Hive的文件格式比较
- Hive的文件格式
- Kylin-4.0.2-server-sp1-Community(银河麒麟)GitLab安装笔记
- Apache Sentry架构介绍
- [bzoj2131] 免费的馅饼
- JavaWeb项目第三次总结_成绩查询的实现
- 接口作为数据类型的应用
- hive文件格式
- ORA-39006: internal error ORA-39213: Metadata processing is not available
- memory management unit
- ACdream 1031 Cut(搜索 树)
- 10,25作业
- 数据库的创建
- ASCII中LF与CR区别(换行符)
- 2017.10.21 C组比赛总结
- JavaEE常用API【Date、DateFormat、Calendar、Math、System、包装类、正则表达式】总结