大而话之BigData 2020-02-29
HBase是Hadoop的一个子项目,用JAVA语言实现,是建立在HDFS的基础上的非关系型分布式数据库,目标是通过水平扩展的方式处理非常庞大的表。值得注意的是,HBase并非结构化数据库,而是介于非关系型数据库(nosql)与关系型数据库(RDBMS)之间,仅能存储非结构化数据和半结构化数据。
为什么要使用HBase:
HBase的特征:
HBase与RDBMS的区别:
数据类型:关系型数据库中数据以表的形式存在,采用关系模型,数据类型以及存储方式多样化,且操作复杂;
HBase以region形式存在,每个region中包含多个列族,将数据存储为未经解释的字符串,没有复杂的表间关系,
只有简单的添加查询等,不支持join操作
存储模式:HBase基于列存储,每个列族由几个文件保存,不同列族分开保存
数据索引:RDBMS针对不同列构建多个索引,HBase只有一个索引----行键,所有访问都通过行键进行访问或扫描
HBase架构:
HMaster:
监控RegionServer
为RegionServer分配Region
处理负载均衡
通过Zookeeper向客户端报告自己的位置
RegionServer:
实际存储HBase的数据
处理HMaster为其分配的Region
维护内部的HLog
处理对内部Region的IO请求
切分过大的Region
Zookeeper:
监听功能,保证集群中只有一个master
存储region的寻址入口
实时监控Region Server的状态并通知master
底层原理:
HLog中记录数据的所有变更,以便在数据丢失时恢复数据;
每个HRegion由多个列族组成,是负载均衡的最小单位,同一个HRegion不可能被多个Region Server同时拥有;
memstore与storefile:memstore相当于内存,storefile相当于磁盘,数据在menstore中一处时,则形成一个单独的storefile,storefile大于某个值时region被分割,并由master重新分配以达到负载均衡
HBase对数据的读写操作:
读:
写: