Hive常見的存儲文件格式

轉載
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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章