hbase学习笔记
1. 概念
Hbase是一个海量存储的非关系型数据库,不支持复杂查询操作,支持横向拓展
2. 表模型
主键、列族、列、时间戳、cell、版本号(默认保存三个)
3. 原理
1 Table中的所有行都按照row key的字典序排列。
2 Table 在行的方向上分割为多个Hregion。
3 region按大小分割的(默认10G),每个表一开始只有一个region,随着数据不断插入 表,region不断增大,当增大到一个阀 值的时候,Hregion就会等分会两个新的 Hregion。当table中的行不断增多,就会有越来越多的Hregion。
4 Hregion是Hbase中分布式存储和负载均衡的最小单元。最小单元就表示不同的 Hregion可以分布在不同的HRegion server上。但一个Hregion是不会拆分到多个 server上的。
5 HRegion虽然是负载均衡的最小单元,但并不是物理存储的最小单元。事实上,HRegion由一个或者多个Store组成,每个store保存一个column family。每个Strore又由一个memStore和0至多个StoreFile组成。
4. 读、写操作
写,见上图;读,略
5. 三个重要机制
Flush:当memoryStore到达128M(默认值)时,持久化到 storefile中
Compact:当storeFile到达一定阀值时,会合并成一个HFile, 持久化到hdfs上
Split:当region到达10G(默认)时,会自动分裂成两个region
6. 查询方式
get:根据rowkey查询某一行
scan:startRow\stopRow,查询某一个范围
scan:全表扫描
7. 过滤器
rowKey过滤器RowFilter
列族过滤器FamilyFilter
列过滤器QualifierFilter
列值过滤器ValueFilter
8. 预分区
原因:
* 增加数据读写效率
* 负载均衡,防止数据倾斜
* 方便集群容灾调度region
* 优化Map数量
方式:
手动指定预分区(最常用)
使用16进制算法生成预分区
分区规则创建于文件中
9. 表设计
- rowkey设计原则
尽量短、散列分布、唯一
10. 列族设计原则
一般1~5个,太多会影响数据库的续写效率
11. 二级索引
为了解决hbase弱查询的问题,有了二级索引的概念,简单说就是以空间换时间,常见的二级索引工具:phoenix\solr\es
12 . 热点解决
加盐、哈希、rowkey反转、时间戳反转
13. 调优
在HDFS的文件中追加内容
优化DataNode允许的最大文件打开数
优化延迟高的数据操作的等待时间
优化数据的写入效率
优化DataNode存储
设置RPC监听数量
优化HStore文件大小
优化hbase客户端缓存
指定scan.next扫描HBase所获取的行数