Hbase概念:高可靠、高性能、面向列、可伸缩的分布式存储系统,可以存储海量数据并对海量数据进行检索。利用HBase 技术可在廉价PC 上搭建起大规模结构化存储集群。HBase使用HDFS 作为底层文件存储系统,在其上可以运行MapReduce 批量处理数据,使用ZooKeeper 作为协同服务组件。
HBase 的特性:HBase 还是一种非关系型数据库,即NoSQL 数据库。
1.容量巨大
HBase 的单表可以有百亿行、百万列,数据矩阵横向和纵向两个维度所支持的数据量级都非常具有弹性。
2. 面向列
HBase 是面向列的存储和权限控制,并支持列独立检索。
3. 扩展性
HBase 底层文件存储依赖HDFS,从“基因”上决定了其具备可扩展性。HBase 的Region 和RegionServer 的概念对应的数据可以分区,分区后数据可以位于不同的机器上,所以在HBase 核心架构层面也具备可扩展性。HBase 的扩展性是热扩展,在不停止现有服务的前提下,可以随时添加或者减少节点。
4. 高可靠性
HBase 提供WAL 和Replication 机制。前者保证了数据写入时不会因集群异常而导致写入数据的丢失;后者保证了在集群出现严重问题时,数据不会发生丢失或者损坏。而且HBase 底层使用HDFS,HDFS 本身的副本机制很大程度上保证了HBase 的高可靠性。同时,协调服务的ZooKeeper 组件具备高可用性和高可靠性。
5. 高性能 底层的LSM 数据结构和Rowkey 有序排列等架构上的独特设计,使得HBase 具备非常高的写入性能。Region 切分、主键索引和缓存机制使得HBase 在海量数据下具备一定的随机读取性能,该性能针对Rowkey 的查询能够达到毫秒级别。同时,HBase 对于高并发的场景也具备很好的适应能力。
Hbase与Hadoop/HDFS:
HBase 使用HDFS 作为底层存储系统。HBase 在 HDFS 之上通过更加复杂的“数据结构和算法”提供了高并发实时随机写和高并发实时点读及扫描的特性,实现了高效的随机读写功能。如LSM(内存+顺序写磁盘)的方式。
Hbase与传统数据库:
关系型数据库 Hbase
支持向上扩展(服务器升级) 支持向外扩展 (添加新的服务器)
使用SQL查询 使用API和MapReduce访问数据
面向行 面向列(为聚集存储设计更好的压缩和解压算法)
适合结构化数据 适合结构化和非结构化数据
当有海量数据需要处理时,可以选择Hbase
Hbase在进行JOIN和多表合并时查询性能不好。
Hbase架构设计
客户端Client
整个集群的访问入口 ,使用HBase的RPC机制与HMaster和HRegionServer进行通信。对于管理类操作,Client 与HMaster 进行RPC 通信;对于数据读写类操作,Client 与RegionServer 进行RPC 交互。包含访问HBase的接口,并维护cache来加强对HBase的访问。
协调服务组件ZooKeeper
ZooKeeper Quorum(队列)负责管理HBase 中多HMaster 的选举、服务器之间状态同步等。HBase 中ZooKeeper 实例存储HBase 元数据信息、实时监控RegionServer、存储所有Region 的寻址入口.保证任何时候集群中只有一个HMaster。
主节点HMaster
HMaster没有单节点问题,Hbase中可以启动多个HMaster,通过Zookeeper的Master Election 机制保证总有一个Master在运行,主要负责Table和Region的管理工作。管理用户对表的增删查改操作。管理HRegionServer的负载均衡,调整Region分布。Region Split之后,负责新Region的分布。在HRegionServer停机后,负责失效HRegioinServer上Region迁移工作。
Region 节点HRegionServer
HRegionServer 主要负责响应用户I/O 请求,向HDFS 文件系统中读写数据。
HBase 存储
HStore 存储是HBase 存储的核心, 由两部分组成:MemStore 和StoreFile。MemStore 是Sorted Memory Buffer,用户写入的数据首先会放入MemStore 中,当MemStore 满了以后会缓冲(flush)成一个StoreFile(底层实现是HFile,只有当storeFile满了之后才会将数据存储到HFile),当StoreFile 文件数量增长到一定阈值,会触发Compact 操作,将多个StoreFiles 合并成一个StoreFile,在合并过程中会进行版本合并和数据删除,因此可以看出HBase 其实只有增加数据,所有的更新和删除操作都是在后续的Compact 过程中进行的,这使得用户的写操作只要进入内存中就可以立即返回,保证了HBase I/O 的高性能。StoreFiles 在触发Compact 操作后,会逐步形成越来越大的StoreFile,当单个StoreFile大小超过一定阈值后,会触发Split 操作,同时把当前Region 分裂成2 个Region,父Region会下线,新分裂的2 个子Region 会被HMaster 分配到相应的HRegionServer 上,使得原先1个Region 的压力得以分流到2 个Region 上。每个Region除了包含多个store外,还包含一个HLOG(预写式日志(WAL),HBase在写动作完成之前先写入到WAL,这样如果内存中的数据还没有写入到硬盘上就发生了崩溃,可以根基HLOG进行恢复。