HBase笔记-1.基本介绍
HBase简介
- HBase-Hadoop Database,是一个提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统。
- 利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用zookeeper作为其分布式协同服务。
- 主要用来存储结构化和半结构化的数据(列存NOSQL数据库)
HBase数据模型
ROWKEY
- 决定一行数据
- 按照字典顺序排序
- ROWKEY只能存储64k的字节数据
Column Family列族和qualifier列
- HBase中的每个列都归属于某个列,列族必须作为表模式(schema)定义的一部分预先给出。如create 'test','course';
- 列名以列族作为前缀,每个列族都可以以有多个列成员(column);course:math,course:english,新的列族成员(列)可以随后按需动态加入。
- 权限控制、存储以及调优都是在列族层面进行的。
- HBase把同一列族里的数据放在同一个目录下,有几个文件保存。
Timestamp时间戳
- 在HBase中每个cell存储单元对同一份数据有多个版本,根据唯一的时间戳来区分每个版本的差异,不同版本的数据按照时间倒序排序,最新的数据版本排在最前面。
- 时间戳是64整型
- 时间戳可以由HBase赋值,此时时间戳是精确到毫秒的当前系统时间。
- 时间戳也可以由客户显式赋值,如果应用程序要避免版本冲突,就必须自己生成具有唯一的时间戳。
cell单元格
- 由行和列的坐标交叉决定
- 单元格都是有版本的
- 单元格的内容都是未解析的字节数组
- 由{ rowkey , column(=<family>+<qualifier>) , version} 唯一确定的单元格。
HLog
- hbase在写入数据之前会先写入MemStore,成功了再写入HLog,当MemStore的数据丢失的时候,还可以用HLog的数据来进行恢复
- HLogKey的五要素,region、tableName、log的顺序、写入时间戳、集群id
HBase体系架构
Client
包含访问HBase的接口并维护cache来加快HBase的访问
Zookeeper
- 保证任何时候,集群中只有一个master
- 存储所有region的寻址入口
- 实时监控regionserver的上线和下线信息。并实时通知Master
- 存储HBase的schema和table的元数据
HMaster
- 管理HRegionServer,实现其负载均衡。
- 管理和分配HRegion,比如在HRegion split时分配新的HRegion;在HRegionServer退出时迁移其内的HRegion到其他HRegionServer上。
- 实现DDL操作(Data Definition Language,namespace和table的增删改,column familiy的增删改等)。
- 管理namespace和table的元数据(实际存储在HDFS上)。
- 权限控制(ACL)。
HRegionServer
- 存放和管理本地HRegion。
- 读写HDFS,管理Table中的数据。
- Client直接通过HRegionServer读写数据(从HMaster中获取元数据,找到RowKey所在的HRegion/HRegionServer后)。
- 负责切分在运行过程中变得过大的region
HRegion
- HBase使用RowKey将表水平切割成多个HRegion,从HMaster的角度,每个HRegion都纪录了它的StartKey和EndKey(第一个HRegion的StartKey为空,最后一个HRegion的EndKey为空),由于RowKey是排序的,因而Client可以通过HMaster快速的定位每个RowKey在哪个HRegion中。
- HRegion由HMaster分配到相应的HRegionServer中,然后由HRegionServer负责HRegion的启动和管理,和Client的通信,负责数据的读(使用HDFS)。每个HRegionServer可以同时管理1000个左右的HRegion
Memstore与soterFile(HFile)
- 一个regoin由多个store组成,一个store对应一个CF(columnfamily)
- store包括内存中的memstore和位于磁盘中的storefile,写操作先写进memstore,当memstore中的数据达到某个阀值,HRegionserver会启动flashcache进程写入到storefile,每次写入形成一个单独的storefile。
- 当storefile数量到达一定阀值后,系统会进行合并,在合并过程中会进行版本合并和删除工作,形成更大的storefile
- 当Region所有storefile的大小和超过一定的阀值后,会把当前的Region分割位两个,并有HMaster分配到相应的Regionserver服务器中,实现负责均衡。
- 客户端检索数据先在memstore中找,再到storefile中找。