說明
Parquet 列時存儲和 Hbase的存儲
Parquet結構
1.特點
列式存儲
自帶Schema
具備Predicate Filter特性
Predicate Filter。先判斷一個文件中是否存在符合條件的數據,有則加載相應的數據,否則跳過
2.文件構成
Parquet文件是以二進制方式存儲的,不能直接讀取和修改,文件中包括該文件的數據和schema
Data Block是具體存放數據的區域
一個文件由多個 row group 組成,
一個 row group 包括了多個 column chunk
一個 column chunck 就是某個 column 的所有數據集,其中一列只會存在一個 column chunk。被分割成多個 page,
一個page是最小的處理單元,可以被編碼或者壓縮
一個Parquet文件的內容由Header、Data Block和Footer三部分組成
Footer部分由File Metadata、Footer Length和Magic Number三部分組成
Parquet文件對於每個page支持標准的壓縮算法比如支持Snappy,gzip以及LZO壓縮格式,也支持不壓縮
分析和調優
Parquet文件讀寫性能的參數主要有兩個,dfs.blocksize和parquet.block.size
parquet-tools 來分析 parquet 文件,Parquet是無法人類可讀的,需要通過一些工具
Hbase 存儲結構
面向列存儲:HBase是面向列存儲的。 K-V
HBase 是一個稀疏的、分布式、持久、多維、排序的映射,它以行鍵(row key),列鍵(column key)和時間戳(timestamp)為索引
1. HBase的數據模型 Data Model :
1. Table:
2. Column Family: Column Family由column和值的集合。HBase里面每個Row由相同的Column Family組成,每個Column Family包含若干的column,
3. Column: Coumn 由column family和column qualifier組成。column qualifier使用:分隔。
4. Row Key的設計就非常重要,設計Row Key的原則就是相互關聯的行應該被存儲在附近。
5. Cell: 一個Cell是Row, Column Family和Column Qualifier的綜合。 {rowkey, column, version} 可以精確的指定一個cell。
2. Hbase架構:
RegionServer,理解為數據節點,存儲數據的。 存放Regions的地方叫做RegionServer
HMaster是 Master Server的實現,負責監控集群中的RegionServer實例
Master RegionServer要實時的向Master報告信息 Master進程負責處理不同的RegionServer之間的Region的分發。
Zookeeper 作為分布式的協調
HDFS 是Hbase運行的底層文件系統
3. Hbase的存儲模型
數據庫的數據存儲方式 探討數據如何在磁盤上進行有效的組織
HRegion
HLog, 預寫日志文件,也叫做WAL(write-ahead log)
HStore
(1)HStore 對應了table中的一個CF列族.
(2)HStore 包含 MemStore 和 StoreFile (底層實現是HFile).
HFile 真實的數據存儲文件- ,HBase最底層的文件組織形式
HFile 物理結構
HFile由 DataBlock 、Meta信息(Index、BloomFilter)、Info等信息組成。
HFile V1的邏輯數據組織格式 DataBlock 區域、MetaBlock(bloomfilter)
與FileInfo、DataBlockIndex、MetaBlockIndex、Trailer分離
HFile V2的邏輯數據組織格式
文件主要分為四個部分:
Scanned block section
Non-scanned block section
Opening-time data section
Trailer
HFile 索引流程圖
4.行鍵設計和Hbase優化
5.版本:參考 https://archive.apache.org/dist/hbase/
2.3.3 2020/11/02
2.2.6 2020/09/04
1.6.0 2020/03/06
1.4.13 2020/02/29
1.2.6/ 2018-05-04 17:41
1.3.1/ 2017-10-04 10:53
hbase-1.3.6/ 2019-10-20 03:29
0.98.12.1/ 2015-05-21
Hbase和Parquet比較
比較
Parquet的 Row group 相當於HBase的 HRegion
Parquet的 colum trunk 相當於HBase的 Store
Parquet的 colum trunk 則由最小單位page存儲 HBase的Store由 StoreFile 組成
Parquet的 colum trunk 的每個page則存儲了一個 三元組 (Repetition Level,Definition Level,value)。通過這個三元組page結構,
Parquet做到了對復雜的嵌套數據結構序列化的支持
而 HBase StoreFile僅是存儲了某一特定列的閥值范圍內的values集合
兩者之間的主要區別,在page 和HFile文件之間的比較
文件存儲
HDFS:
Block 是 hdfs 中的最小的存儲單元,使得其能將大文件切分為多個小文件
參考:
粗略對比Parquet和Hbase數據存儲結構 https://blog.csdn.net/sudo5zzb/article/details/51276557
Parquet的那些事(一)基本原理 https://blog.csdn.net/zwgdft/article/details/104582229/
hbase實踐之HFile結構 https://www.cnblogs.com/small-k/p/9715810.html
Data Model http://hbase.apache.org/book.html#datamodel
http://hbase.apache.org/downloads.html