一、HBase简介
- HBase的四大核心功能模块 客户端Client、协调服务模块ZooKeeper、主节点HMaster 和Region 节点RegionServer。
- 客户端Client Client是HBase系统的入口,使用RPC机制与HMaster和RegionServer通信。管理类操作,client使用RPC机制连接HMaster进行操作。数据读写类操作,client使用RPC机制连接RegionServer进行操作。客户端类型:JAVA、Thrift、Avro、Rest、Mapreduce等。
RPC机制:RPC机制基于传统的函数调用原理。在编程过程中,我们会将一个大功能分割成若干个小功能,每个小功能用一个函数实现,通过函数调用将这些函数连接起来。一般而言,这些函数必须运行在同一台机器中。而RPC机制提供了一种方法,它可以将函数分散到不同的机器中,允许机器A中的main函数调用机器B中的func4。
-
协调服务组件ZooKeeper Zookeeper负责管理HBase:存储HBase元数据信息,实时监控RegionServer、存储所有Region的寻址入口,HMaster选举(保证集群只有一个HMaster),服务器状态同步。
-
HMaster HBase中可以启动多个HMaster,通过Zookeeper管理,保证只有一个Master正常运行并提供服务,其他节点备用,HMaster主要负责Table和Region的管理工作: 管理用户对table的增删改查操作
管理RegionServer的负载均衡,调整Region分布 Region分裂时,负责新Region的分布 RegionServer死机后,负责失效的RegionServer上的Region的迁移
-
Region节点HRegionServer HBase中最核心的模块。负责响应用户IO请求,向HDFS文件系统中读写数据。HRegionServer内部管理了一系列HRegion对象,每个HRegion对应了Table 中的一个Region。HRegion由多个HStore组成,每个HStore(仓库)对应了Table中的一个ColumnFamily的存储。 HStore存储是HBase存储的核心,由两部分组成:MemStore和StoreFile。MemStore是SortedMemoryBuffer,用户写入的数据首先会放入MemStore中,当MemStore满了以后会缓冲(flush)成一个StoreFile(底层实现是HFile),当StoreFile文件数量增长到一定阈值,会触发Compact操作,将多个StoreFiles合并成一个StoreFile,在合并过程中会进行版本合并和数据删除,因此可以看出HBase其实只有增加数据,所有的更新和删除操作都是在后续的Compact过程中进行的,这使得用户的写操作只要进入内存中就可以立即返回,保证了HBaseI/O的高性能。
写入数据时先写入缓存中(MEMStore),缓存增大到一定程度时,写成一个文件(StoreFile),当文件(StoreFiles)增加到一定程度时,会将多个文件合并成一个文件(compact),当一个Region上的StoreFiles增大道一定程度时,触发拆分操作,把一个Region分裂成2个Region,老Region下线。两个新Region由HMaster分发到对应的HRegionServer上。
HStore 仓库 MemStore 缓存仓库 StoreFile 仓库文件
-
HBase应用场景 存储大量的数据(PB 级数据)且能保证良好的随机访问性能。
需要很高的写吞吐量,瞬间写入量很大,传统数据库不能支撑或需要很高成本支撑的场景。 可以进行优雅的数据扩展,动态扩展整个存储系统容量。 数据格式无限制,支持半结构化和非结构化的数据。 业务场景简单,不需要全部的关系型数据库特性,例如交叉列、交叉表,事务、连接等。