1.1 HBase的是个啥子?
是建立的HDFS之上,提供高可靠性、高性能、列存储、可伸缩、实时读写的分布式数据库系统。
- 在需要实时读写随机访问超大规模数据集时,可以使用HBase。
1.2 HBase的特点
- 海量存储
- 可以存储大批量的数据
- 列式存储
- HBase表的数据是基于列族进行存储的,列族是在列的方向上的划分。
- 极易扩展
- 底层依赖HDFS,当磁盘空间不足的时候,只需要动态增加datanode节点就可以了
- 可以通过增加服务器来对集群的存储进行扩容
- 高并发
- 支持高并发的读写请求
- 稀疏
- 稀疏主要是针对HBase列的灵活性,在列族中,你可以指定任意多的列,在列数据为空的情况下,是不会占用存储空间的。
- 数据的多版本
- HBase表中的数据可以有多个版本值,默认情况下是根据版本号去区分,版本号就是插入数据的时间戳
- 数据类型单一
- 所有的数据在HBase中是以字节数组进行存储
2. HBase表的数据模型
2.1 rowkey行键
- table的主键,table中的记录按照rowkey 的字典序进行排序
- Row key行键可以是任意字符串(最大长度是 64KB,实际应用中长度一般为 10-100bytes)
2.2 Column Family列族
- 列族或列簇
- HBase表中的每个列,都归属与某个列族
- 列族是表的schema的一部分(而列不是),即建表时至少指定一个列族
- 比如创建一张表,名为
user
,有两个列族,分别是info
和data
,建表语句create 'user', 'info', 'data'
2.3 Column列
- 列肯定是表的某一列族下的一个列,用
列族名:列名
表示,如info
列族下的name
列,表示为info:name
- 属于某一个ColumnFamily,类似于我们mysql当中创建的具体的列
2.4 cell单元格
- 指定row key行键、列族、列,可以确定的一个cell单元格
- cell中的数据是没有类型的,全部是以字节数组进行存储
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2dAIG3PB-1613899803638)(assets/Image201911072218.png)]
2.5 Timestamp时间戳
- 可以对表中的Cell多次赋值,每次赋值操作时的时间戳timestamp,可看成Cell值的版本号version number
- 即一个Cell可以有多个版本的值
3. HBase整体架构
3.1 Client客户端
- Client是操作HBase集群的入口
- 对于管理类的操作,如表的增、删、改操纵,Client通过RPC与HMaster通信完成
- 对于表数据的读写操作,Client通过RPC与RegionServer交互,读写数据
- Client类型:
- HBase shell
- Java编程接口
- Thrift、Avro、Rest等等
3.2 ZooKeeper集群
- 作用
- 实现了HMaster的高可用,多HMaster间进行主备选举
- 保存了HBase的元数据信息meta表,提供了HBase表中region的寻址入口的线索数据
- 对HMaster和HRegionServer实现了监控
3.3 HMaster
- HBase集群也是主从架构,HMaster是主的角色,是老大
- 主要负责Table表和Region的相关管理工作:
- 关于Table
- 管理Client对Table的增删改的操作
- 关于Region
- 在Region分裂后,负责新Region分配到指定的HRegionServer上
- 管理HRegionServer间的负载均衡,迁移region分布
- 当HRegionServer宕机后,负责其上的region的迁移
3.4 HRegionServer
- HBase集群中从的角色,是小弟
- 作用
- 响应客户端的读写数据请求
- 负责管理一系列的Region
- 切分在运行过程中变大的region
3.5 Region
- HBase集群中分布式存储的最小单元
- 一个Region对应一个Table表的部分数据
HBase使用,主要有两种形式:①命令;②Java编程