Hbase的列式存储和Parquet列式文件
说明
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 中的最小的存储单元,使得其能将大文件切分为多个小文件