行列存储对比
| 行 | 列 |
优点 | 1.便于按行查询数据,OLTP往往是此场景 2.便于行级插入、删除、修改 3.易保证行级一致性 | 1.便于按列使用数据,如对列分组、排序、聚合等,OLAP很多是这样 2.列数据同类型,便于压缩 3.表设计灵活,易扩展列 |
缺点 | 1.当只需查询某几个列时,还是会读整行数据 2.扩展列代价往往较高 | 1.不便于按行使用数据 2.很难保证行级一致性 |
优化思想 | 读取过程尽量减少不需要的数据 | 提高读写效率 |
优化措施 | 1.设计表时尽量减少冗余列 2.内存中累积写入到阈值再批量写入 | 1.多线程方式并行读取不同列文件 2.行级一致性,可通过加入RDBMS中回滚机制、校验码等 3.内存中累积写入到阈值再批量写入 |
应用场景 | OLTP | OLAP |
3 HBase架构
3.1 Client
Client有访问Hbase的接口,会去meta表查询目标region所在位置(此信息会放入缓存),并连接对应RegionServer进行数据读写。
当master rebalance region时,Client会重新进行查找。
3.2 Zookeeper
- HMaster和RegionSerer都注册到ZK上,使HMaster可感知RegionServer上下线。
- 选举,保证HMaster HA。
- 保存
.META.
表所在RegionServer位置
3.3 HMaster
- 监控RegionServe状态,并为之分配Region,以维护整个集群的负载均衡
- 通过HMasterInterface接口维护集群的元数据信息,管理用户对table的增删改查操作
- Region Failover:发现失效的Region,就到正常的RegionServer上恢复该Region
- RegionSever Failover:由HMaster对其上的region进行迁移
3.4 HRegionServer
3.4.1 主要职责
- 处理用户读写请求,并和底层HDFS的交互。我们说RegionServer拥有某个region意思是这个region读写、flush之类的操作都是由当前regionserver管理的。如果该RegionServer本地没有HDFS DataNode 底层数据就要从其他DataNode节点远程读写。
- 负责Region变大以后的split
- 负责Storefile的合并工作
- Region属于某个表水平拆分的结果(初始一个Region),每个表的Region分部到多个RegionServer。
- Region上按列族划分为多个Store
- 每个Store有一个MemStore,当有读写请求时先请求MemStore
- 每个Store又有多个StoreFile
- HFiles是数据的实际存储格式,他是二进制文件。StoreFile对HFile进行了封装。HBase的数据在底层文件中时以KeyValue键值对的形式存储的,HBase没有数据类型,HFile中存储的是字节,这些字节按字典序排列。
- BlockCache
3.5 HDFS
为HBase提供最终的底层数据存储服务,多副本保证高可用性 .
- HBase表的HDFS目录结构如下
/hbase
/data
/<Namespace> (集群里的Namespaces)
/<Table> (该集群的Tables)
/<Region> (该table的Regions)
/<ColumnFamily> (该Region的列族)
/<StoreFile> (该列族的StoreFiles)
- HLog的HDFS目录结构如下
/hbase
/WALs
/<RegionServer> (RegionServers)
/<WAL> (WAL files for the RegionServer)
3.6 Region
3.6.1 概述
一个Region水平切分的示例:
- 一个RegionServer上存在多个Region和一个Hlog实例。
- Region属于某个表水平拆分的结果(初始一个Region),每个表的Region分部到多个RegionServer。
- Region上按列族划分为多个Store
- 每个Store有一个MemStore,当有读写请求时先请求MemStore。MemStore内部是根据
RowKey
,Column
,Version
排序 - 每个Store又有多个StoreFile