1、概述
HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统
客户端启动命令
方式一:
分别启动
bin/hbase-daemon.sh start master
bin/hbase-daemon.sh start regionserver
方式二:
//启动
bin/start-hbase.sh
//关闭
bin/stop-hbase.sh
2、Hbase架构
1)Client
Client包含了访问Hbase的接口,另外Client还维护了对应的cache来加速Hbase的访问,比如cache的.META.元数据的信息
2)Zookeeper
HBase通过Zookeeper来做master的高可用、RegionServer的监控、元数据的入口以及集群配置的维护等工作。具体工作如下:
通过Zoopkeeper来保证集群中只有1个master在运行,如果master异常,会通过竞争机制产生新的master提供服务
通过Zoopkeeper来监控RegionServer的状态,当RegionSevrer有异常的时候,通过回调的形式通知Master RegionServer上下线的信息
通过Zoopkeeper存储元数据的统一入口地址
3)Hmaster(NameNode)、
master节点的主要职责如下:
为RegionServer分配Region
维护整个集群的负载均衡
维护集群的元数据信息
发现失效的Region,并将失效的Region分配到正常的RegionServer上
当RegionSever失效的时候,协调对应Hlog的拆分
4)HregionServer(DataNode)
HregionServer直接对接用户的读写请求,
它的功能概括如下:
管理master为其分配的Region
处理来自客户端的读写请求
负责和底层HDFS的交互,存储数据到HDFS
负责Region变大以后的拆分
负责Storefile的合并工作
5)HDFS
HDFS为Hbase提供最终的底层数据存储服务,同时为HBase提供高可用(Hlog存储在HDFS)的支持,具体功能概括如下:
提供元数据和表数据的底层分布式存储服务
数据多副本,保证的高可靠和高可用性
3、基本指令
1、进入客户端
bin/hbase shell
2、查看当前命名空间有那些表
list
3、创建表
创建表的时候需要声明列族
create 'student','info'
4、插入数据
hbase(main):004:0> put 'student','1001','info:sex','male'
hbase(main):004:0> put 'student','1001','info:age','18'
hbase(main):005:0> put 'student','1002','info:name','Janna'
hbase(main):006:0> put 'student','1002','info:sex','female'
hbase(main):007:0> put 'student','1002','info:age','20'
5、扫描查看数据
hbase(main):008:0> scan 'student'
hbase(main):009:0> scan 'student',{STARTROW => '1001', STOPROW => '1001'}
hbase(main):010:0> scan 'student',{STARTROW => '1001'}
6、查看表结构
hbase(main):011:0> describe 'student'
7、更新指定字段的数据(其实并没有更新数据,只是插入数据记录,Hbase通过时间戳控制版本VERSION)
hbase(main):012:0> put 'student','1001','info:name','Nick'
hbase(main):013:0> put 'student','1001','info:age','100'
8、查看“指定行”或“指定列族:列”的数据
hbase(main):014:0> get 'student','1001'
hbase(main):015:0> get 'student','1001','info:name'
9、统计表数据行数
hbase(main):021:0> count 'student'
10、删除数据
删除某rowkey的全部数据
hbase(main):016:0> deleteall 'student','1001'
删除某rowkey的某一列数据
hbase(main):017:0> delete 'student','1002','info:sex'
11、清空表数据(清空表的操作顺序为先disable,然后再truncate)
hbase(main):018:0> truncate 'student'
12、删除表数据
首先需要先让该表为disable状态:
hbase(main):019:0> disable 'student'
然后才可以drop这个表:
hbase(main):020:0> drop 'student'
13、变更表信息
将info列族中的数据按照时间戳最近的存放3个版本:
hbase(main):022:0> alter 'student',{NAME=>'info',VERSIONS=>3}
14、其他命令
//创建命名空间
create_namespace '_'
//向指定命名空间创建表
create '命名空间:表名','列族'
4、Hbase数据结构
1、RowKey
RowKey是用来检索记录的主键,访问HBASE table中的行,有三种方式:
1、通过单个RowKey访问(get)
2、通过RowKey的range(正则)(like)
3、全表扫描(scan)
RowKey行键 (RowKey)可以是任意字符串,在HBASE内部,RowKey保存为字节数组。
存储时,数据按照RowKey的字典序(byte order)排序存储。设计RowKey时,要充分排序存储这个特性,将经常一起读取的行存储放到一起。(位置相关性)
2、Column Family
列族:HBASE表中的每个列,都归属于某个列族。
列族是表的schema的一部 分(而列不是),必须在使用表之前定义。
3、Cell
由{rowkey, column Family:columu, version} 唯一确定的单元。cell中的数据是没有类型的,全部是字节码形式存贮。
4、Time Stamp
每个 cell都保存着同一份数据的多个版本。版本通过时间戳来索引。
时间戳的类型是 64位整型。时间戳可以由HBASE(在数据写入时自动 )赋值,此时时间戳是精确到毫秒的当前系统时间。时间戳也可以由客户显式赋值。如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。
每个 cell中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面。
HBASE提供 了两种数据版本回收方式:
一是保存数据的最后n个版本
二是保存最近一段 时间内的版本(比如最近七天)。
5、NameSpace
1) Table:所有的表都是命名空间的成员,即表必属于某个命名空间,如果没有指定,则在default默认的命名空间中。
2) RegionServer group:一个命名空间包含了默认的RegionServer Group。
3) Permission:权限,命名空间能够让我们来定义访问控制列表ACL(Access Control List)。例如,创建表,读取表,删除,更新等等操作。
4) Quota:限额,可以强制一个命名空间可包含的region的数量。