淘先锋技术网

首页 1 2 3 4 5 6 7

目录

Hbase->BigTable

一个列族对应一个Store

HBase三维有序

javaAPI操作

1、数据库(DataBase)

2、表Table

3、列族(Column Family)

4、列修饰符(Column Qualifier)

1、创建一个配置文件

2、创建连接

3、如果需要对表结构操作 则getAdmin,对数据进行操作,则getTable

4、创建 testAPI表

HBase的特点

RowKey:

列簇:

时间戳:

Cell:

Compaction操作:

minor compaction:

major compaction:



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功能,改为手动在业务低峰期触发。