Hbase是一个基于HDFS的面向列的分布式数据库,源于Google的bigTable论文。
如果需要实时地随机访问超大规模数据集,使用Hbase是一个更好的选择。
Hbase同样是采用Master/Slaves的主从服务器结构,它是由一个HMaster服务器和多个HReginServer服务器构成,而所有服务器都是通过Zookeeper协调并处理各服务器运行期间可能遇到的错误。
HBase采用Master/Slave架构
1)HMaster
2)RegionServer
3)Zookeeper
4)HBase Client
5)Region
HMaster的作用
1、是HBase集群的主节点,可以配置多个,用来实现HA
2、处理元数据的变更
3、监控RegionServer
4、负责RegionServer的负载均衡
5、处理RegionServer故障转移
6、通过ZooKeeper发布自己的位置给客户端
RegionServer负责管理维护Region,负责存储HBase实际数据
1)一个RegionServer包含一个WAL、一个BlockCache (读缓存)和多个Region
2)一个Region包含多个存储区,每个存储区对应一个列族
3)一个存储区由多个StoreFile和MemStore组成
4)一个StoreFile对应于一个HFile和一个列族
5)HFile和WAL作为序列化文件保存在HDFS上
6)Client与RegionServer交互
功能
1、负责管理HBase的实际数据
2、处理分配给它的Region
3、刷新缓存到HDFS
4、维护HLog
5、执行Compaction
6、负责处理Region分片
HBase物理架构 - Region和Table
单个Table(表)被分区成大小大致相同的Region
Region是HBase集群分布数据的最小单位
Region被分配给集群中的RegionServer
一个Region只能分配给一个RegionServer
HBase逻辑架构 - Row
Rowkey(行键)是唯一的并已排序
Schema可以定义何时插入记录
每个Row都可以定义自己的列,即使其他Row不使用
相关列定义为列族
使用唯一时间戳维护多个Row版本
在不同版本中值类型可以不同
HBase数据全部以字节存储
HBase生态圈技术
1)Lily – 基于HBase的CRM
2)OpenTSDB – HBase面向时间序列数据管理
3)Kylin – HBase上的OLAP
4)Phoenix – SQL操作HBase工具
5)Splice Machine – 基于HBase的OLTP
6)Apache Tephra – HBase事务支持
7)TiDB – 分布式SQL DB
8)Apache Omid - 优化事务管理
9)Yarn application timeline server v.2 迁移到HBase
10)Hive metadata存储可以迁移到HBase
11)Ambari Metrics Server将使用HBase做数据存储
HBase元数据管理
数据管理目录
系统目录表hbase:meta
存储元数据
ZooKeeper存储hbase:meta表的位置信息
HBase实际数据存储在HDFS上
HBase 命令
(1)判断表存在与否:exists ‘表名’
(2)使用通配符的方式列出所有表:list
(3)查看HBase的版本:version
(4)查看HBase的状态:stuts
- 查看HBase帮助文档:help
- 创建一个表user,列族为baseinfo,privateinfo:create ‘user’,{NAME => ‘baseinfo’},{NAME => ‘privateinfo’}
- 查看user表信息 whoaml
- 向user表中入数据:put ‘user’,’1001’,’baseinfo:name’,’zhangsan’
- 根据rowkey获取数据:
1)get ‘user’,’001’
2) scan ‘usr’,{COLUMN => [’baseinfo:name’}
6.获取指定CF数据的两种方式
遍历获取 scan ‘user’
按列读取 scan ‘user’,{COLUMN => [‘baseinfo:name’]}
7.获取指定列的数据
按列读取 scan ‘user’,{COLUMN => [‘prvate’]}
8.更新数据put ‘user’,1001,’baseinfo:name’,’lisi’直接覆盖
9.修改多版本存
alter ‘user’,NAME => ‘baseinfo’ ,VERSIONS => ‘5
10.多版本数据查询
Scan ‘user’,{COLUMN => [‘baseinfo:name’],VERSIONS => 5}
11.统计user表中数据个数
Count ‘user’
12.指定rowkey范围查询
Scan ‘user’,{STARTROW => ‘a’,STOPROW => ‘n’}
13.删除整行
Delete ‘user’,1001
14.删除一个单元格的值
Delet ‘user’,102,’baseinfo:name’, 1595237734474
15.删除一列
Delete ‘user’,’private:age’
16.删除一个列族数据
Alter ‘user’,’delete’ => ‘private’
17.启动user表: Enable ‘user’
禁用表:Disable ‘user’
18.清空表
Truncate ‘user’
19.删除user表
Disable ‘user’
Drop ‘user’