HBase学习日志
记一下学习HBase时学了什么。
HBase定义,一种数据库。支持增删改查操作。
HBase逻辑结构:列、列族(多个列)、row key(唯一标识)、region(多个行,即表的切片内容)、store(真正存储的内容)。下图可以视作三维表。
HBase数据模型:Name Space(分HBase、default)、region、row、column和列族、Time Stamp、cell。
HBase物理存储:HBase中时间戳是很重要的概念。增删查改是与时间戳有关的(追求效率)。查找会找到最大时间戳的数据,修改会直接添加一个(大于之前的)时间戳。删除会把type改成delete,时间戳大于之前的put会判断为已删除。在修改时不会对数据本身改变,追求效率,删除原数据会之后进行。版本versions是维护相同数据(同rowkey和列)不同时间戳的个数。
在BigTable(HBase的前身)中,大部分概念和HBase都是相同或是一脉相承的,不论是从数据结构的角度,还是服务器集群实现的角度,都有很大的相似性。
学习历程:
搭建环境。(至少需要Zookeeper和Hadoop环境基础)
HBase的DDL、DML操作。(命令行操作,在Linux执行)
HBase的API操作。判断表存在、创建/删除表;创建命名空间;插入数据、查询数据;删除数据等。
HBase与Hadoop MR的连接。连接后可以互通的使用框架。自定义MR-Hbase任务:创建MR(Mapper、Reducer、Driver)代码对HBase数据库进行操作。打包成JAR在集群上运行。
HBase优化。(HMaster)高可用;预分区和RowKey设计;内存优化与基础(一些参数)优化。
在整个HBase优化中,预分区和RowKey设计的地位是比较高的。
HBase深层原理:写、读数据;FLUSH、COMPACT、SPLIT。
实际案例——谷粒微博:
1、需求分析。思考业务逻辑。根据需求制定表。
2、项目架构。(utils、dao、constants、bean)
3、Util类封装。(创建命名空间、创建表、判断表是否存在)
4、定义常量。(表名、列名、版本数)
5、写DAO层。(一些业务逻辑操作,包括发布微博、关注、取关等,操作涉及多张表)
6、测试。(初始化HBase——建三张表,然后写一些业务逻辑操作,看看控制台输出结果以及HBase Shell下scan表得到的结果)