HBase基础知识点

HBase
HBase基础知识点

列存储的优点:1)减少存储空间占用。2)⽀支持好多列
HBase的特点: 海量存储(基于HDFS);列式存储;支持高并发;易扩展;稀疏;数据多版本;数据类型单一(全部用字节数组来存储)

列存储的优点:1)减少存储空间占用。2)⽀支持好多列
HBase的特点: 海量存储(基于HDFS);列式存储;支持高并发;易扩展;稀疏;数据多版本;数据类型单一(全部用字节数组来存储)

HBase数据逻辑结构
HBase基础知识点

HBase整体架构:
HBase基础知识点

HBase shell操作: put; get; rowkey的范围值查询(非常重要)rowkey底层存储是字典序 scan ‘lagou’, {COLUMNS =>‘base_info’, STARTROW => ‘rk1’, ENDROW => ‘rk3’} 包左不包右
HBase读数据流程:
HBase基础知识点

HBase写数据流程:
HBase基础知识点

HBase的flush(刷写)及compact(合并)机制:默认达到128M,或者数据时间超过1小时,或者达到堆大小的40%,自动刷写到磁盘手动flush命令:flush tableName
如果在下次周期检查(默认10秒)到来之前,数据疯狂写入Memstore中,则会引发阻塞机制,此时无法写⼊入数据到Memstore,数据无法写入Hbase集群。

Compact合并机制hbase中主要存在两种类型的compac合并:minor compact 小合并和major compact 大合并小合并:删除和更新的数据仅仅只是做了了标记,并没有物理理移除,这种合并的触发频率很高。触发小合并的条件:memstore flush前后都会进行判断是否触发compact;周期性检查是否需要进行compaction操作

大合并:合并Store中所有的HFile为一个HFile这个过程有删除标记的数据会被真正移除,同时超过单元格maxVersion的版本记录也会被删除。合并频率比较低,默认7天执行一次,并且性能消耗非常大,建议生产关闭(设置为0),在应用空闲时间手动触发。手动大合并:major_compact tableName

Region 拆分机制:
HBase基础知识点

HBase表的预分区(region)使用pre-splitting,在创建table的时候就配置好,生成多个region。预分区的好处:增加数据读写效率;负载均衡,防止数据倾斜;方便集群容灾调度regioncreate ‘person’,‘info1’,‘info2’,SPLITS => [‘1000’,‘2000’,‘3000’]    //三个值可以创建四个region分区
Region合并合并的目的是为了维护方便冷合并:需要关闭hdfs集群;热合并不需要关闭集群
Hbase 协处理理器器访问HBase的方式是使用scan或get获取数据,在获取到的数据上进行业务运算。但是在数据量量非常大的时候,再按常用的方式移动获取数据就会遇到性能问题。客户端也需要有强⼤大的计算能力以及⾜足够的内存来处理这么多的数据。此时就可以考虑使用Coprocessor(协处理理器器)。将业务运算代码封装到Coprocessor中并在RegionServer上运行,即在数据实际存储位置执行,最后将运算结果返回到客户端。
协处理理器类型:Observer(类比触发器)&Endpoint(类比存储过程)Observer协处理理器器与触发器器(trigger)类似:在一些特定事件发⽣生时回调函数(也被称作钩子函数,hook)被执行。这些事件包括一些⽤用户产生的事件,也包括服务器器端内部自动产生的事件。协处理理器器框架提供的接口如下RegionObserver:用户可以用这种的处理器处理数据修改事件,它们与表的region联系紧密。MasterObserver:可以被用作管理或DDL类型的操作,这些是集群级事件。WALObserver:提供控制WAL的钩子函数。Endpoint这类协处理器类似传统数据库中的存储过程,客户端可以调用这些 Endpoint 协处理器在Regionserver中执行一段代码,并将 RegionServer 端执行结果返回给客户端进一步处理。
Endpoint Coprocessor的应用我们后续可以借助于Phoenix非常容易就能实现。针对Hbase数据集进行聚合运算直接使用SQL语句就能搞定。
HBase表的RowKey设计字典排序(HBase的Rowkey是按照ASCII有序设计的);长度越短越好,最好不要超过16个字节(设计过长会降低memstore内存的利用率和HFile存储数据的效率);RowKey散列原则(建议将rowkey的高位作为散列字段,这样将提高数据均衡分布在每个RegionServer,以实现负载均衡的几率);RowKey唯一原则(必须在设计上保证其唯一性, 访问hbase table中的行:有3种方式:单个rowkey/rowkey 的range/全表扫描(一定要避免全表扫描))。
HBase表的热点当大量的client访问hbase集群的⼀个或少数几个节点,造成少数region server的读/写请求过多、负载过大,而其他region server负载却很小,就造成了“热点”现象。
热点的解决方案预分区:预分区的⽬目的让表的数据可以均衡的分散在集群中,⽽而不不是默认只有⼀个region分布在集群的一个节点上。加盐:在rowkey的前面增加随机数,具体就是给rowkey分配一个随机前缀以使得它和之前的rowkey的开头不同。哈希:哈希会使同⼀行永远用一个前缀加盐。哈希也可以使负载分散到整个集群,但是读却是可以预测的。使用确定的哈希可以让客户端重构完整的rowkey,可以使用get操作准确获取某一个行数据。反转:反转固定长度或者数字格式的rowkey。这样可以使得rowkey中经常改变的部分(最没有意义的部分)放在前面。这样可以有效的随机rowkey,但是牺牲了rowkey的有序性。
HBase的⼆级索引hbase的二级索引其本质就是建立hbase表中列与行键之间的映射关系。常见的二级索引我们⼀般可以借助各种其他的方式来实现,例如Phoenix或者solr或者ES等
布隆过滤器hbase的读操作需要访问大量的⽂文件,大部分的实现通过布隆过滤器来避免大量的读文件操作。hbase 中布隆过滤器器来过滤指定的rowkey是否在目标文件,避免扫描多个文件。使用布隆过滤器来判断。布隆过滤器返回true,在结果不一定正确,如果返回false则说明确实不存在。
不建议使用HBase做数据分析,HBase适合存储原始数据,并快速查询!
测试题:1.HBase的批量加载底层是通过什么实现的:mapreduce2.rowkey可以使用汉字和字符串