转载
https://blog.youkuaiyun.com/qq_32641659/article/details/89339143
1、Hive常见的文件格式
- SEQUENCEFILE:生产中绝对不会用,k-v格式,比源文本格式占用磁盘更多
- TEXTFILE:生产中用的多,行式存储
- RCFILE:生产中用的少,行列混合存储,ORC是他得升级版
- ORC:生产中最常用,列式存储
- PARQUET:生产中最常用,列式存储
- AVRO:生产中几乎不用,不用考虑
- JSONFILE:生产中几乎不用,不用考虑
- INPUTFORMAT:生产中几乎不用,不用考虑
hive默认的文件格式是TextFile,可通过set hive.default.fileformat 进行配置
行式存储和列式存储
列式存储:
优点:当查询部分字段时,极大减小列查询数据的范围,显著提高查询效率
缺点:当查询全部字段时,数据需要重组,比直接读取一行慢
行式存储:
优点:全字段查询速度快
缺点:当查询部分字段时,底层依旧读取所有字段数据,造成资源浪费。生产中很少遇到全字段查询
2、hive文件格式配置实现以及对比
#先关闭压缩
SET hive.exec.compress.output=false;
使用SEQUENCEFILE文件格式
SEQUENCEFILE格式数据反而变大了,生产肯定不可取的
#创建SEQUENCEFILE数据存储格式表
create table page_views_seq
stored as SEQUENCEFILE
as select * from page_views;
#查看hdfs数据
[hadoop@hadoop001 ~]$ hdfs dfs -du -s -h /user/hive/warehouse/wsktest.db/page_views_seq/*
19.6 M 19.6 M /user/hive/warehouse/wsktest.db/page_views_seq/000000_0
使用RCFILE格式
相较于普通文件,无读写以及存储优势,rc格式数据只节约了10%左右的空间存储,生产测试中读写性能也没有多大的提升
#创建RCFILE数据存储格式表
create table page_views_rc
stored as RCFILE
as select * from page_views;
#查看hdfs数据
[hadoop@hadoop001 ~]$ hdfs dfs -du -s -h /user/hive/warehouse/wsktest.db/page_views_rc/*
17.9 M 17.9 M /user/hive/warehouse/wsktest.db/page_views_rc/000000_0
使用ORC文件格式
orc格式文件大小是原文本1/3左右,默认使用压缩则只有原文本的1/6左右
#创建ORC文件格式表,默认是使用zlib压缩,支持zlib和snappy
create table page_views_orc
stored as ORC
as select * from page_views;
#查看hdfs数据
[hadoop@hadoop001 ~]$ hdfs dfs -du -s -h /user/hive/warehouse/wsktest.db/page_views_orc/*
2.8 M 2.8 M /user/hive/warehouse/wsktest.db/page_views_orc/000000_0
#创建ORC文件格式表,不使用压缩
create table page_views_orc_none
stored as ORC tblproperties ("orc.compress"="NONE")
as select * from page_views;
#查看hdfs数据
[hadoop@hadoop001 ~]$ hdfs dfs -du -s -h /user/hive/warehouse/wsktest.db/page_views_orc_none/*
7.7 M 7.7 M /user/hive/warehouse/wsktest.db/page_views_orc_none/000000_0
使用PARQUET文件格式
parquet格式文件大小是源文件的1/5左右。生产上也是好的选择
#创建PARQUET文件格式表
set parquet.compression=gzip; #设置parquet文件的压缩格式,我这里设不设置,文件大小都一致
create table page_views_par
stored as PARQUET
as select * from page_views;
#查看hdfs数据
[hadoop@hadoop001 ~]$ hdfs dfs -du -s -h /user/hive/warehouse/wsktest.db/page_views_par/*
3.9 M 3.9 M /user/hive/warehouse/wsktest.db/page_views_par/000000_0