HBase进一步说明
Hbase基本概念
RowKey:是Byte array,是表中每条记录的“主键”,方便快速查找,Rowkey的设计非常重要。
Column Family:列族,拥有一个名称(string),包含一个或者多个相关列
Column:属于某一个columnfamily,familyName:columnName,每条记录可动态添加
Version Number:类型为Long,默认值是系统时间戳,可由用户自定义
Value(Cell):Byte array
Hbase基本组件说明:
Client
包含访问HBase的接口,并维护cache来加快对HBase的访问,比如region的位置信息
Master
为Region server分配region
负责Region server的负载均衡
发现失效的Region server并重新分配其上的region
管理用户对table的增删改查操作
Region Server
Regionserver维护region,处理对这些region的IO请求
Regionserver负责切分在运行过程中变得过大的region
Zookeeper作用
通过选举,保证任何时候,集群中只有一个master,Master与RegionServers 启动时会向ZooKeeper注册
存贮所有Region的寻址入口
实时监控Region server的上线和下线信息。并实时通知给Master
存储HBase的schema和table元数据
默认情况下,HBase 管理ZooKeeper 实例,比如, 启动或者停止ZooKeeper
Zookeeper的引入使得Master不再是单点故障
Region管理
hbase(main)> scan 'hbase:meta'
Hbase中默认情况下单个Region是256MB
默认建表时有一个region,这个region的rowkey是没有边界的,即没有startkey和endkey,
在数据写入时,所有数据都会写入这个默认的region,
随着数据量的不断增加,此region已经不能承受不断增长的数据量,会进行split,分成2个region
控制在建表的时候,创建多个空region,并确定每个region的起始和终止rowky,
这样只要我们的rowkey设计能均匀的命中各个region,这样预先创建hbase表分区的方式,称之为预分区
Hbase中有两张特殊的Table,-ROOT-和.META.维护着当前集群上所有区域的列表、状态和位置
.META.:记录了用户表的Region信息,.META.可以有多个regoin
-ROOT-:记录了.META.表的Region信息,-ROOT-只有一个region
Zookeeper中记录了-ROOT-表的location
Client访问用户数据之前需要首先访问zookeeper,然后访问-ROOT-表,接着访问.META.表,
最后才能找到用户数据的位置去访问,中间需要多次网络操作,不过client端会做cache缓存。
HBase的WebUI以及log:
在Ambari中Dashboard面板中 有HBase Linkd ,在模块右下角有个More,点击,可以查看
HBase Master UI
HBase Logs
Zookeeper Info
或者直接在web中输入: http://unix191:16010/master-status
权限管理
查看权限:> user_permission
HBase提供的五个权限标识符:RWXCA,分别对应着READ('R'), WRITE('W'), EXEC('X'), CREATE('C'), ADMIN('A')
HBase提供的安全管控级别包括:
Superuser:拥有所有权限的超级管理员用户。通过hbase.superuser参数配置
Global:全局权限可以作用在集群所有的表上。
Namespace :命名空间级。
Table:表级。
ColumnFamily:列簇级权限。
Cell:单元级。
和关系数据库一样,权限的授予和回收都使用grant和revoke,但格式有所不同
容错处理
Hbase采用客户端、从属机和协调主控机组成的模型
定时向zookeeper汇报心跳
物理模型
每个column family存储在hdfs上的单个文件中,并且空值不会被保存;
rowKey和version number在每个column family中均有一份;
HBase为了每一个值维护了多级索引,即:<rowkey, timestamp,column family,column name >
1、Table中所有行都会按照rowkey的字典排序列;
2、Table在行的方向上分割为多个region;
3、Region按大小分割的,每个表开始只有一个region,
随着数据增加,region不断增大,当增大到一个阀值的时候,region会等分分割为列个新的region,之后会越来越多;
4、Region是HBase中分布式存储和负载均衡的最小单位,不同region分布到不同Regionserver上。
5、Region虽然是分布式存储的最小单元,但并不是存储的最小单元。
Region由一个或者多个store组成,每个store又由一个memStore和0至多个storefile组成,
storefile包含HFile;memstore存储在内存中,storefile存储在hdfs上。
统计Hbase表的行数
方法一:在hbase shell中执行count的命令可以统计行数----<适用于数据量较小的情况>。
hbase(main)> count 'tablename', {INTERVAL => 100, CACHE => 500}
语法:count <table>, {INTERVAL => intervalNum, CACHE => cacheNum}
# INTERVAL设置多少行显示一次及对应的rowkey,默认1000;CACHE每次去取的缓存区大小,默认是10,调整该参数可提高查询速度
# 例如,查询表t1中的行数,每100条显示一次,缓存区为500
方法二:调用的hbase jar中自带的统计行数的类
$HBASE_HOME/bin/hbase org.apache.hadoop.hbase.mapreduce.RowCounter 'tablename'
参考:
Hbase原理、基本概念、基本架构 http://blog.csdn.net/woshiwanxin102213/article/details/17584043