HBase进一步说明

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:单元级。
    和关系数据库一样,权限的授予和回收都使用grantrevoke,但格式有所不同

容错处理

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

blogroll

social