1、HBase是什么
HBase是基于HDFS的数据存储,它建立在HDFS文件系统上面,利用了HDFS的容错能力,内部还有哈希表并利用索引,可以快速对HDFS上的数据进行随时读写功能。
Hadoop在已经有一个Hive+MapReduce结构的数据读写功能,为什么还要HBase呢?我们在使用Hive的过程中也发现,MapReduce的过程很慢,不适合实时的读写访问,更多的时候是进行线下的访问。但在实际应用过程中,我们需要对大数据进行实时的读写,这时候HBase就派上用场。
HBase使用场景:
HBase适合在瞬间写入量大,大量数据需要长期保存,并且数量会持续增长的场景。但在多级索引和关系复杂的数据模型,还有跨行事务场景也不适合HBase。
2、HBase怎么工作
HBase基础架构
Client
- 与Zookeeper进行通信,获取数据入口地址;
- 与HMaster通信进行管理类操作;
- 与HRegionServer进行数据读写操作。
Zookeeper
- 避免单点问题,一直只有running master;
- 存储所有Region的地址,包括HMaster地址;
- 监控HRegionServer的状态,并告知HMaster;
- 存储Table名和Column Family
HMaster
- 有多个HMaster,通过Zookeeper保证有一个在运行;
- 为HRegionServer分类Region;
- 有HRegionServer失效,重新分配;
- 对HDFS的垃圾文件进行回收;
- 处理用户对表的增删改查操作;
HRegionServer
- HBase核心部分,负责I/O请求,并先HDFS读写数据;
- 维持HMaster分配的Region,并处理Region的I/O请求;
- 切分在运行过程中变大的Region;
- HRegionServer中有一系列HRegion对象,每个HRegion对应Table中的一个Region,每个HRegion由多个Store组成,每个HStore对应Table中的Column Family。
Column Family是HBase的存储单元,所以相同特性的Column放在一个Column Family更高效。
HStore
- HBase存储的核心,由MemStore和StoreFile组成;
HRegion
- 一个Table最开始的时候是一个Region;
- 一个Region可以有多个Store,每个Store用来存储一个Column Family;
- Region随着数据的越来越多,会进行拆分,由HRegionServer进行拆分,默认大小为10G。
HLog
- 备份和日志,在系统出错和宕机时,MemStore的数据会丢失,而HLog可以防止该情况。
HBase写数据流程