目录
3、如果需要对表结构操作 则getAdmin,对数据进行操作,则getTable
Hbase->BigTable
Hbase系统架构
一个列族对应一个Store
Store分为,n个StoreFile,1个MemStore(内存)
HLog日志:负责容错,写memstore前先写HLog,属于HRegionServer
Master修改表,不影响读写
Memstore与storefile
store分为,ms和sf
ms到达128m时,会写成一个sf
当一个region所有storefile大小数量超过一定阈值以后,会把当前的region分割为两个
由master分配到相应的regionserver服务器,实现负载均衡
客户端查找数据,现在memstore,找不到再找storefile
HBase三维有序
按照KV存储
Row Key和列簇时间戳确定一个cell
Row key唯一标识 一行数据
按照字典顺序排序
Row key只能存储64k的字节数据
创建表的时候必须至少有一个列族
Column Family(列族)
qualifier(列)
{row key,colunm(=+),version}确定一个单元cell中的数据没有类型,全是字节码形式存储
HLog:Hadoop Sequence File
javaAPI操作
1、数据库(DataBase)
HBaseAdmin
HBaseConfiguration
2、表Table
HTable
3、列族(Column Family)
HTableDescriptor
4、列修饰符(Column Qualifier)
Put
Get
Scanner
类:org.apache.hadoop.hbase.client.HBaseAdmin
作用:提供了一个接口来管理HBase数据库的表信息。它提供的方法包括:
创建表,删除表,列出表,使表有效或无效,以及添加或删除表列族成员
1、创建一个配置文件
Configuration conf = HBaseConfiguration.create();
配置ZK地址,通过ZK可以找到HBase
conf.set("hbase.zookeeper.quorum", "master:2181,node1:2181,node2:2181");
2、创建连接
Connection conn = ConnectionFactory.createConnection(conf);
3、如果需要对表结构操作 则getAdmin,对数据进行操作,则getTable
Admin admin = conn.getAdmin();
4、创建 testAPI表
HTableDescriptor testAPI = new HTableDescriptor(TableName.valueOf("testAPI"));
并指定一个列簇cf1
HColumnDescriptor cf1 = new HColumnDescriptor("cf1");
给testAPI表增加一个列簇
testAPI.addFamily(cf1);
创建testAPI表
admin.createTable(testAPI);
关闭连接
admin.close(); conn.close();
HBase的特点
1、大,一个表可以有上亿行,上百万列
2、面向列,面向列族的存储和权限控制,列独立检索
3、稀疏,对于为空NULL的列,并不占存储空间,因此,表可以设计的非常稀疏
4、无模式:每一行都有一个可以排序的主键和任意多的列,列可以根据需要动态增加,同一张表中不同的行可以有截然不同的列
5、数据多版本:每个单元中的数据可以有多个版本,默认情况下,版本号自动分配,版本号就是单元格插入时的时间戳
6、数据类型单一:HBase中的数据都是字节数组,没有类型。
RowKey:
主键,访问HBase table只有三种方式:
直接通过单个RowKey
指定RowKey的范围
还可以指定跟RowKey有关的正则表达式等方式去访问
最大64kb,按照字典顺序
列簇:
建表时至少指定一个,列归属某一个列簇
HBase再存储、权限控制、版本控制都是在列簇层面上进行
一个列簇对应一个store
时间戳:
版本的概念,插入数据都会记录时间,64位整型
按时间戳倒序
Cell:
Cell是由{row key,column(=+),version}唯一确定的单元
Cell中的数据是没有类型的,全部是字节码形式存储
Region的分裂策略:
region中存储的是一张表的数据,当region中的数据条数过多的时候,会直接影响查询效率。当region过大的时候,region会被拆分为两个region,HMster会将分裂的region分配到不同的regionserver上达到负载均衡。
Compaction操作:
minor compaction:
指选取一些小的,相邻的storefile将他们合并成一个更大的storefile,在这个过程中不会处理已经Deleted或Expired的cell,一次Minor Compaction的结果是更少并且更大的StoreFile。
major compaction:
指将所有的StoreFile合并成一个storefile,这个过程会清理三类没有意义的数据:被删除的数据、TTL过期数据、版本号超过设定版本号的数据,另外,一般情况下,major compaction时间会持续比较长,整个过程会消耗大量系统资源,对上层业务有比较大的影响,因此线上业务都会将关闭自动触发major compaction功能,改为手动在业务低峰期触发。