hive中的文件格式的簡介


【hive中的file_format】

  • SEQUENCEFILE:生產中絕對不會用,k-v格式,比源文本格式占用磁盤更多
  • TEXTFILE:生產中用的多,行式存儲
  • RCFILE:生產中用的少,行列混合存儲,OCR是他得升級版
  • ORC:生產中最常用,列式存儲
  • PARQUET:生產中最常用,列式存儲
  • AVRO:生產中幾乎不用,不用考慮
  • JSONFILE:生產中幾乎不用,不用考慮
  • INPUTFORMAT:生產中幾乎不用,不用考慮

【注意】hive默認的文件格式是TextFile,可通過set hive.default.fileformat 進行配置

 

 【行式存儲與列式存儲】

  • 行式存儲與列式存儲數據物理底層存儲區別

【結論:由上圖可知】

  1. 行式存儲一定會把同一行數據存到同一個塊中,在select查詢的時候,是對所有字段的查詢,不可以單獨查詢某一行
  2. 列式存儲同一列數據一定是存儲到同一個塊中,換句話說就是不同的列可以放到不同塊中,在進行select查詢的時候可以單獨查詢某一列。

 

優缺點

  • 列式存儲

  1. 優點:當查詢某個或者某幾個字段的時候,只需要查看存儲這幾個字段的這幾個block就可以了,大大的減少了數據的查詢范圍,提高了查詢效率
  2. 缺點:當進行全字段查詢的時候,數據需要重組,比單獨查一行要慢

 

  • 行式存儲

  1. 優點:全字段查詢比較快
  2. 缺點:當查詢一張表里的幾個字段的時候,底層依舊是讀取所有的字段,這樣查詢效率降低,並且會造成不必要的資源浪費,而且,生產中很少會出現需要全字段查詢的場景

 

 

【hive文件格式配置實現以及對比】

  •  創建原始表默認TEXTFILE
  • CREATE EXTERNAL TABLE g6_access (
  • cdn string,
  • region string,
  • level string,
  • time string,
  • ip string,
  • domain string,
  • url string,
  • traffic bigint)
  • ROW FORMAT DELIMITED
  • FIELDS TERMINATED BY '\t'
  • LOCATION '/g6/hadoop/access/clear/test/';

 

  • 導入測試數據
  • [hadoop@hadoop001 data]$ ll
  • -rw-r--r-- 1 hadoop hadoop 68051224 Apr 17 17:37 part-r-00000
  • [hadoop@hadoop001 data]$ hadoop fs -put part-r-00000 /g6/hadoop/access/clear/test/

 

  • 通過hue查看數據的大小    64.9MB

 

  • 創建以 SEQUENCEFILE格式儲存的表g6_access_seq,並使用g6_access中的數據
  • create table g6_access_seq
  • stored as SEQUENCEFILE
  • as select * from g6_access ;
  • 查看數據大小   71.8MB

  • 結論:比默認的TEXTFILE格式的文件還要大,生產上基本上是不會用的

 

  • 創建RCFILE數據存儲格式表,,並使用g6_access中的數據
  • create table g6_access_rc
  • stored as RCFILE
  • as select * from g6_access;
  •  查看數據大小  61.6MB

  • 結論:存儲減少了3M左右,微不足道,讀寫性能也沒有什么優勢,生產也沒有用他的理由

 

  •  創建ORCFILE數據存儲格式表,,並使用g6_access中的數據,默認是使用zlib壓縮,支持zlib和snappy
  • create table g6_access_orc
  • stored as ORC
  • as select * from g6_access;

 

  • 查看數據大小    17.0MB

 

 

 

  • 創建ORCFILE數據存儲格式表,並使用g6_access中的數據
  • create table g6_access_orc_none
  • stored as ORC tblproperties ("orc.compress"="NONE")
  • as select * from g6_access;
  • 查看數據大小    51.5MB

 

  • 創建PARQUET數據存儲格式表,不使用壓縮,並使用g6_access中的數據
  • create table g6_access_par
  • stored as PARQUET
  • as select * from g6_access;

 

  •  結論:ORC文件不壓縮,比源文件少了10多MB,ORC文件采用默認壓縮,文件只有源文件的四分之一
  • 查看數據大小    58.3MB

 

  • 創建PARQUET數據存儲格式表,設置使用gzip壓縮格式,並使用g6_access中的數據
  • set parquet.compression=gzip;
  • create table g6_access_par_zip
  • stored as PARQUET
  • as select * from g6_access;

 

  • 結論:parquet格式文件大小是源文件的1/4左右。生產上也是好的選擇

 

【讀取數據量對比】

  • 直接執行 select 查詢,觀察日志 尾部HDFS Read: 190XXX ,就可知道讀取數據量了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM