HBase简介
HBase – hadoop DataBase, 是一个
- 高可靠性,包含下面两点:
- 数据不可丢:由于Hbase依赖于HDFS, HDFS对数据进行备份,保证数据不会丢。
- 服务不能挂: 由于Zookeeper(分布式协作服务管理), 保证服务的高可靠性。zookeeper实时的对集群状态进行监测, zookeeper内部有自动选leader,一旦leader挂了,将会在其他节点中选取一个leader,保证服务的高可靠性。
- 高性能: 相对于传统的关系型数据库,读写速率是非常高。
- 面向列:
- 实时读写: 相应的时间为ms级 的分布型数据库。
利用HDFS作为其文件存储系统
- 利用MapReduce来处理HBase中的海量数据
- 利用zookeeper作为其分布式协同服务
数据类型:
- 非结构化和半结构化的松散数据(列存NoSQL数据库)
- 而传统的关系型数据库只能储存结构化数据
- Row key
- 决定一行数据
- 按照字典顺序排序
Row Key只能存储64K字节数据
- Column Family 列族 & qualifier 列
- 每个列都属于某个列族, 列族必须是表模式(schema)定义的一部分预先输出。如:
create 'test', 'course'
. - cf:a 列族:列, 可以按需加入。
- 权限控制, 存储以及调优都是在列族层面进行的。
HBase把同一列的数据存储到统一目录下的多个文件。
- TimeStamp时间戳
- 每个cell存储同一份数据, 有多个版本, 按照唯一时间戳来区分各个版本之间的差异。
- 时间戳为64位整数
- 为当前系统时间
也可以由客户显示赋值, 如果应用程序要避免冲突, 就不必须自己生成一个惟一性的时间戳。
Cell单元格
- 由行和列交叉决定
- 单元格是由版本的,单元格对应的时间戳
- 单元格中的内容是未解析的字节数组
- 由{row key, column(=+), version}唯一确定的单元,
- 注意cell中的数据是没有类型的,全是字节码形式
HBase中的存储数据到时以二进制的形式存储。
HBase体系架构- Client
- 包含访问HBase的接口并维护cache来加快HBase的访问
Zookeeper
- 保证任何时候, 集群中只有一个master.体现了服务高可用, 一旦挂了一个,将会启动一个。
- 存储所有Region的寻址入口
每创建一个表,就是一个Region, 当表的数据过大,将会分成多个Region。存储表的元数据信息:一个表分成几个Region,每个Region存在那个地方, 在自链表表的那个段,这些信息都存在Zookeeper。
存储HBase的schema和table的元数据
- Region是table的一部分。
- HMaster,表的元数据信息都存在Zookeeper, HMaster相当于一个领导
- 为RegionServer分配Region
- 新来的一个Region,我要将他放在哪个Region
- 负责RegionServer的负载均衡
- 当创建一个表,生成一个Region, 持续向表中插入数据,达到了阈值, 将分裂成2个Region, 数据再增加,将会分裂成3、4、…100个。不能让这100个Region在这一个HRegionServer, 而其他RegionServer中没有Region, 为了数据均衡, 将部分Region迁移到其他的HRegionServer.相当于工作的分配,一个员工的工作过多,将分配她的任务给其他人。
- 发现失效的RegionServer并重新分配其上的Region
- 管理用户对table的增删操作
- HRegionServer
- 维护Region,处理对这些Region的IO请求
- 负责切分在运行过程中变的过大的Region
- 当RegionServer中的Region过多,HMaster将会做一个负载均衡。
Region
- 当创建一个表,生成一个Region, 持续向表中插入数据,达到了阈值, 将分裂成2个Region, 数据再增加,将会分裂成3、4、…100个。
- 当表中的行不断增多,就会有越来越多的Region,在HMaster的调度写,使一个表被保存在多个RegionServer上。
Memstore与storefile
- 一个Region由多个store组成,一个store对应一个CF(列族)
- store包括位于内存中的memstore和位于磁盘中的storefile.写操作:先写入memstore,但memstore中的数据达到阈值, HRegionServer会启动flashcache进程系写入storefile, 每次写入形成一个单独的storefile。
- 当storefile文件增长到一定阈值后, 系统会进行合并(minor,majar compcation), 在合并中进行版本合并和删除工作(majar),形成更大的storefile.
- 当一个Region所有的storefile的大小和超过一个阈值后, 会把当前的Region分割成两个,并通过HMaster的调度, 分配到相应的HRegionServer中, 实现负载均衡。
- 客户端检索数据,现在memstore找, 找不到载找storefile.
storefile 以HFile格式保存在HDFS上。
- Hlog也是存在HDFS上。