它是稀疏、分布式、持久化的、多维有序映射;
shell命令行交互:HBase Shell:hbase shell
常用shell命令:list(列出HBase所有表);describe tbName(显示HBase表详细信息);create 'tbName','column family'(建表);put ‘tbName’,‘rowID’,‘column family:column quarlifier’,‘value’(新增);get 'tbName',"rowID"(读数据);scan 'tbName'(读数据);
关系数据库是二维数据库,HBase数据库是四维数据库,坐标(rowKey, column family, column qualifier, version);
HBase写机制:1.预写日志HLog;2.MemStroe;
HLog:write-ahead log,简称WAL,是HBase底层文件系统上的一个文件;HBase集群每台服务器维护一个WAL,HBase写数据之前,先写入WAL,直到WAL新纪录成功写入MemStore,写动作才算作完成;如果HBase服务器宕机,WAL具有自动回访机制,不需要手动回复;
MemStore:内存写入缓冲区,在HBase把数据持久化到硬盘之前,HBase都把数据写在MemStore,直到MemStore写满为止(MemStore大小由HBase配置文件控制),MemStore满了,HBase把数据持久化到硬盘,生成一个HFile文件;集群的每个节点上一个列族对应一个MemStore;
HFile:HBase底层存储格式,HFile对应于列族,一个列族可对应多个HFile,一个HFIle不能存多个列族;
HBase读数据:通过Get对象对标进行读取;1.检查MemStore待修改队列;2.检查BlockCache包含该行的Block最近是否被访问过;3.访问硬盘个上的HFile;
HBase读机制:HBase实现了快速读取数据,采用BlockCache(使用LRU算法:最近最少使用算法)缓存技术,
BlockCache:与MemStore在同一个JVM堆里,用来保存从HFile里读入内容的频繁访问的数据,避免硬盘读取;每个列族都有一个自己的BlockCache;
Block:BlockCache中的Block,是HBase从硬盘里完成一次读取的数据单位;是建立索引的最小数据单位;也是从硬盘读取的最小数据单位;
HFile存放形式:Block的序列外加这些Block的索引;HBase要读出一个Block需要先通过索引查找该Block,然后从硬盘读出;
随机访问Block设置小点(索引变大);顺序扫描:Block设置大点(索引项变小,索引变小);
删除数据:实质上是打上删除标记,查询时不会返回含有删除标记的单元格;
HBase合并:小合并(把多个小HFile合并为一个大HFile)、大合并(给定region的一个列族的所有HFile进行合并为一个HFile);
HBase含有时间版本概念;
HBase数据模型:表、行键、列族、列限定符、单元、时间版本;