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. 表设计

  1.  rowkey设计原则

                  尽量短、散列分布、唯一

10. 列族设计原则

         一般1~5个,太多会影响数据库的续写效率

11. 二级索引

        为了解决hbase弱查询的问题,有了二级索引的概念,简单说就是以空间换时间,常见的二级索引工具:phoenix\solr\es

12 . 热点解决

       加盐、哈希、rowkey反转、时间戳反转

13. 调优

       在HDFS的文件中追加内容

       优化DataNode允许的最大文件打开数

       优化延迟高的数据操作的等待时间

       优化数据的写入效率

       优化DataNode存储

       设置RPC监听数量

        优化HStore文件大小

        优化hbase客户端缓存

        指定scan.next扫描HBase所获取的行数