數倉工具hive(四):Hive文件存儲格式以及優缺點


前言

Hive支持的存儲數的格式主要有:TEXTFILE 、SEQUENCEFILE、ORC、PARQUET。

行與列存儲的特點

行存儲的特點

查詢滿足條件的一整行數據的時候,列存儲則需要去每個聚集的字段找到對應的每個列的值,行存儲只需要找到其中一個值,其余的值都在相鄰地方,所以此時行存儲查詢的速度更快。

列存儲的特點

因為每個字段的數據聚集存儲,在查詢只需要少數幾個字段的時候,能大大減少讀取的數據量;每個字段的數據類型一定是相同的,列式存儲可以針對性的設計更好的設計壓縮算法。

Hive文件存儲格式以及優缺點

textfile

  • 默認的文件格式,行存儲。建表時不指定存儲格式即為textfile,導入數據時把數據文件拷貝至hdfs不進行處理
  • 優點:最簡單的數據格式,便於和其他工具(Pig, grep, sed, awk)共享數據,便於查看和編輯;加載較快
  • 缺點:耗費存儲空間,I/O性能較低;Hive不進行數據切分合並,不能進行並行操作,查詢效率低
  • 場景:適用於小型查詢,查看具體數據內容的測試操作

sequencefile

  • 含有鍵值對的二進制文件,行存儲
  • 優點:可壓縮、可分割,優化磁盤利用率和I/O;可並行操作數據,查詢效率高
  • 缺點:存儲空間消耗最大;對於Hadoop生態系統之外的工具不適用,需要通過text文件轉化加載
  • 場景:適用於數據量較小、大部分列的查詢

rcfile

  • 存儲模式:按列存儲,采用行組模式對數據進行存儲(數據按行分塊,每塊按照列存儲)
  • 存儲結構:包括(16字節的HDFS同步塊信息以及元數據的頭部信息主要包括該行組內的存儲的行數、列的字段信息)
  • 存儲空間:采用游程編碼
  • 優點:可壓縮,高效的列存取;查詢效率較高
  • 缺點:加載時性能消耗較大,需要通過text文件轉化加載;讀取全量數據性能低
  • 場景:多數用於存儲需要“長期留存”的數據文件

orcfile

  • 存儲模式:按列存儲,所有列存在一個文件中,
  • 每個ORC文件首先會被橫向切分成多個Stripe,而每個Stripe內部以列存儲,所有的列存儲在一個文件中,而且每個stripe默認的大小是250MB,相對於RCFile默認的行組大小是4MB,所以比RCFile更高效。Postscripts中存儲該表的行數,壓縮參數,壓縮大小,列等信息;Stripe Footer中包含該stripe的統計結果,包括Max,Min,count等信息;FileFooter中包含該表的統計結果,以及各個Stripe的位置信息;IndexData中保存了該stripe上數據的位置信息,總行數等信息;RowData以stream的形式保存了數據的具體信息
  • 除了游程編碼,引入了字典編碼和Bit編碼
  • 場景:適用於Hive中大型的存儲、查詢

parquet

  • 存儲模式:按列存儲,Parquet文件是以二進制方式存儲的,不可以直接讀取和修改的,文件是自解析的,文件中包括該文件的數據和元數據
  • 存儲結構:行組(Row Group):按照行將數據物理上划分為多個單元,每一個行組包含一定的行數,在一個HDFS文件中至少存儲一個行組,Parquet讀寫的時候會將整個行組緩存在內存中,所以如果每一個行組的大小是由內存大的小決定的


免責聲明!

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



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