1.1 HMaster
HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行,HMaster在功能上主要负责Table和Region的管理工作:
管理用户对Table的增、删、改、查操作(admin操作);管理HRegionServer的负载均衡,调整Region分布;在Region 合并分裂后,负责新的Region重新分配;在HRegionServer停机后,负责失效HRegionServer 上的Regions迁移;HMaster是保证HBase高可靠的因素之一;线上环境 ,HMaster是般由两到三台组成,普通(24G)的虚拟机;
1.2 HRegionServer
HRegionServer是存储实际Region,响应客户端写入的IO,并负责存储数据到HDFS中,是HBase最核心的部分; 2.理论上HRegionServer是可以无限扩容的,这也是为什么说HBase是一个存储海量数据的数据库;在生产环境中,
通常HRegionServer和HDFS部署在相同的机器上,并且最好要在同一个大交换机下面的端口;HRegionServer机器的配置要求: CPU内核数越多、内存越大、硬盘越大越好,当然regionServer的JVM堆内存不是越大越好,通常建议不要超过32G,过大,会有严重的Full GC问题,而且在64位的JVM中,堆大小超过32G,指针不能做压缩;
一台HRegionServer上有多个HRegion, 一个HRegion上有多个Hstore,一个family对应一个HStore ,一个Hstore上有多个StoreFile和一个MemStore ,HBase用LSM树来组织这些StoreFile和MemStore, 因为LSM树这种数据结构只适合写,不太适合读, 而B+树适合读,不太适合写 ,因此这才是
HBase是一种适合写多读少的数据库的根本原因, 而
mysql关系型数据库适合读多写少的应用场景。下面是LSM树和B+树的数据结构: