用户自定义的表默认情况下命名空间为default,而系统自带的元数据表的命名空间为hbase 当TimeStamp最大值的Type为Delete,且代表数据已删除,不会返回值 数据按照rowkey字典顺序存储 列族+rowkey+时间戳 来唯一确定数据 = cell 单元格 put 'stu', '1001', 'info:name', 'zhangsan' 插入操作,这里stu为表名,1001为rowkey,info 列:name列名,zhangsan 值
外部文章
Hbase优缺点
Hadoop+Hbase+ZooKeeper三者关系与安装配置
Hbase数据检索流程与数据存储
写流程
读流程比写流程慢
写流程
确定 RegionServer 后 1 JUC加锁,为了读写分离 2 写wal日志,如果wal写入失败则删除内存数据回滚 3 数据存入 MemStore 4 RegionServer 内所有 MemStore 达到阈值(百分之45)/ 达到设定时间(默认1h) / 达到HRegion内存阈值(默认128mb)/wal文件数量达到阈值 ,则 Flush 成一个 StoreFile 5 StoreFile增长到一定阈值 ,则触发Compact合并操作,多个StoreFile合并成一个StoreFile
读流程·
因为无法确定内存数据和磁盘数据哪个时间戳更大,所以得同时读取内存和磁盘的数据, 再合并以KeyValueHeap:PriorityQueue形式得出最终结果
Hbase读流程
数据删除时间点
flush阶段和Compact大合并会删除数据 1 flush:删除当前memStore中重复的数据(timestamp较小的删除)。 如果数据唯一则type标记为删除,但不实际删除数据。 因为flush操作的是memstore的数据,即最新的数据。如果flush时,被memstore标记的数据删除了,StoreFile中有相同rowkey的数据,但是却无法知道该数据已删除,查询数据时会从磁盘中查到理论已删除的数据,则产生冲突 2 Compact:每次flush都会判断一次是否需要合并,有两种合并方式 小合并:就会在该记录上打上标记,被打上标记的记录就成了墓碑记录,该记录使用get和scan查询不到。但不做任何删除数据 大合并:小时间戳数据会被大时间戳数据覆盖,会重新新文件,删除淘汰数据。默认7天,非常消耗时间 3 split: 当每次执行完flush 或者compact操作,都会判断是否需要split。当发生split的时候,会生成两个region A 和 region B但是parent region数据file并不会发生复制等操作,而是region A 和region B 会有这些file的引用。这些引用文件会在下次发生compact操作的时候清理掉,并且当region中有引用文件的时候是不会再进行split操作的
Hbase Split



