轉載
https://blog.csdn.net/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