做网站产品资料表格,网站建设一站式,网站页面建设,成都网页设计设公司文章目录
HBase分布式数据库入门到精通
一、简单介绍
二、HBase数据模型
三、HBase的架构
四、HBase写操作流程
五、HBase读操作流程
六、HBase minor小合并和major大合并
七、HBase目标表meta表
八、HBase特点
九、HBase的使用场景 HBase分布式数据库入门到精通 一、…
文章目录
HBase分布式数据库入门到精通
一、简单介绍
二、HBase数据模型
三、HBase的架构
四、HBase写操作流程
五、HBase读操作流程
六、HBase minor小合并和major大合并
七、HBase目标表meta表
八、HBase特点
九、HBase的使用场景 HBase分布式数据库入门到精通 一、简单介绍
HBase是一个高可靠性、高性能、面向列、可伸缩、实时读写的分布式 NOSQL 数据库。
当你需要随机、实时读/写访问大数据时请使用 Apache HBase。
作用主要用来存储非结构化、半结构化和结构化的松散数据列式存储的 NoSQL 数据库
名称解释 NameSpace 命名空间相当于关系型数据库中的 database每个命名空间下有多个表。Hbase 默认自带的命名空间 hbase 和 defaulthbase 中存放的是 HBase 内置的表default 是用户默认使用的命名空间。 Region 类似关系型数据库的表不同之处在于 HBase 定义表示只需要声明列族不需要声明具体的列。列可以动态的按需要指定HBase 更加适合字段经常变更的场景。开始创建表是一个表对应一个 region当表增大到一定值是会被拆分为两个 region。 Row HBase 表中的每行数据被称为 Row由一个 RowKey 和多个 Column 组成数据是按照 RowKey 的字典顺序存储的并且查询是只能根据 RowKey 进行检索所以 RowKey 的设计很关键。 Column 列是由列族Column Family和列限定符Column Qualifier进行限定例如 base:name,base:sex。建表示只需定义列族而列限定符无需预先定义。 Cell 某行中的某一列被称为 Cell单元格由{rowkeycolumn family:columnqualifier,timestamp}确定单元。Cell 中没有具体的类型全部是字节码的形式字节数组存储。 TimeStamp 用于标识数据的不同版本version每条数据写入时如果不指定时间戳系统会自动为其加上该字段值为写入 HBase 的时间。 二、HBase数据模型
逻辑上HBase 的数据模型同关系型数据库很类似数据存储在一张表中有行有列。但从底层物理存储结构Key-Value来看HBase 更像一个 Map。
HBase的逻辑结构如下 HBase的物理存储结构 三、HBase的架构 client 1包含访问HBase的接口对HBase进行访问 2客户端通过查询zookeeper中信息获取HBase集群信息。 zookeeper 1保证任何时候集群中只有一个master 2存贮所有Region的寻址入口。 3实时监控RegionServer的上线和下线信息,并实时通知HMaster。 4存储HBase的Schema和table元数据 Master 1为RegionServer分配Region 2负责RegionServer的负载均衡 3发现失效的RegionServer并重新分配其上的region 4管理用户对table的增删改操作 RegionServer 1RegionServer维护region处理对这些Region的IO请求 2RegionServer负责切分在运行过程中变得过大的Region HLog(WAL Log) 1HLog文件就是一个普通的Hadoop Sequence FileSequence File的Key是HLogKey对象HLogKey中记录了写入数据的归属信息除了table和region名字外同时还包括sequence number和timestamptimestamp是写入时间sequence number的起始值为0或者是最近一次存入文件系 统中sequence number。 2HLog SequeceFile的Value是HBase的KeyValue对象即对应HFile中的KeyValue。 Region 1 HBase自动把表水平划分成多个区域(region)每个region会保存一个表里面某段连续的数据每个表一开始只有一个region随着数据不断插入表Region不断增大当增大到一个阀值的时候Region就会等分会两个新的Region裂变。 2 当table中的行不断增多就会有越来越多的Region。这样一张完整的表被保存在多个Regionserver上。 MemstoreStoreFile 1一个region由多个store组成一个store对应一个CF列族 2Store包括位于内存中的memstore和位于磁盘的storefile。写操作先写入Memstore当Memstore中的数据达到某个阈值,HRegionserver会启动flashcache进程写入storefile每次写入形成单独的一个storefile 3StoreFile是只读的一旦创建后就不可以再修改。因此Hbase的更新其实是不断追加的操作。当一个Store中storefile文件的数量增长到一定阈值后系统会进行合并minor、 major compaction在合并过程中会进行版本合并和删除工作majar将对同一个key的修改合并到一起形成更大的storefile。 4当一个region所有storefile的大小和超过一定阈值后会把当前的region分割为两个并由hmaster分配到相应的regionserver服务器实现负载均衡。 5客户端检索数据先在memstore找找不到再找storefile。 6 HRegion是HBase中分布式存储和负载均衡的最小单元。最小单元就表示不同的HRegion可以分布在不同的HRegionServer上。 7HRegion由一个或者多个Store组成每个store保存一个columns family。 8每个Strore又由一个memStore和0至多个StoreFile组成。 四、HBase写操作流程 1、Client发送请求从Zookeeper中获取HMaster的地址及meta表所在的RegionServer地址向HRegionServer发出写数据请求。
2、数据被写入HRegion的MemStore同时写入到HLog中。
3、MemStore中的数据被Flush成一个StoreFile
4、当MemStore达到阈值后把数据刷成一个storefile文件当多个StoreFile文件达到一定的大小后会触发Compact合并操作当compact后逐渐形成越来越大的storefile。
5、StoreFile大小超过一定阈值后触发Split操作把当前HRegion Split成2个新的HRegion父HRegion会下线新Split出的2个子HRegion会被HMaster分配到相应的HRegionServer上使得原先1个HRegion的压力得以分流到2个HRegion上。
6、若MemStore中的数据有丢失则可以从HLog上恢复。 五、HBase读操作流程 1、client首先从zookeeper找到meta表的region的位置然后读取meta表中的数据。而meta中又存储了用户表的region信息。
2、根据namespace、表名和rowkey根据meta表中的数据找到写入数据对于的region信息
3、找到对应的RegionServer查找对应的Region先从Memstore中找数据如果没有再从StoreFile中读取数据。 六、HBase minor小合并和major大合并
当客户端向HBase中写入数据时首先写入HLog和Memstore中在一个Store中当Memstore内存占满后数据会写入磁盘形成一个新的数据存储文件StoreFile随着 memstore 的刷写会生成很多StoreFile,当一个store中的storefile达到一定的阈值后就会进行一次合并将对同一个key的修改合并到一起形成一个大的storefile当storefile的大小达到一定阈值后又会对storefile进行split划分为两个storefile。
由于对表的更新是不断追加的合并时需要访问store中全部的storefile和memstore将它们按row key进行合并由于storefile和memstore都是经过排序的并且storefile带有内存中索引合并的过程还是比较快的。
因为存储文件不可修改HBase是无法通过移除某个键/值来简单的删除数据而是对删除的数据做个删除标记表明该数据已被删除检索过程中删除标记掩盖该数据客户端读取不到该数据。
随着memstore中数据不断刷写到磁盘中会产生越来越多的storeFile小文件HBase内部通过将多个文件合并成一个较大的文件解决这一小文件问题以上过程涉及两种合并如下
minor小合并
minor 合并负责合并Store中的多个storeFile文件当StoreFile文件数量达到hbase.hstore.compaction.min 值默认值为3时将会合并成一个StoreFile大文件。这种合并主要是将多个小文件重写为数量较少的大文件减少存储文件数量因为StoreFile的每个文件都是经过归类的所以合并速度很快主要受磁盘IO性能影响。
major大合并
将一个region中的一个列簇(对应一个Store)的若干个经过minor合并后的大的StoreFile重写为一个新的StoreFile。而且major合并能扫描所有的键/值对顺序重写全部数据重写过程中会略过做了删除标记的数据。 七、HBase目标表meta表
目录表 hbase:meta 作为HBase表存在并从 hbase shell 的 list(类似 show tables)命令中过滤掉但实际上是一个表就像任何其他表一样。
hbase:meta 表以前称为.META.保有系统中所有 region 的列表。hbase:meta位置信息存储在 zookeeper 中hbase:meta 表示所有查询的入口。
表结构如下
keyregion的key结构为[table],[region start key,end key],[region id]
values:info:regioninfo当前region序列化的HRegionInfo实例info:server包含当前region的RegionServer的server:portinfo:serverstartcode包含当前region的RegionServer进程的开始时间
当表正在拆分时将创建另外两列称为 info:splitA 和 info:splitB这些列代表两个子 region 这些列的值也是序列化的 HRegionInfo 实例。区域分割后将删除此行。
a,,endkeya,startkey,endkeya,startkey,
空键用于表示表开始和表结束。具有空开始键的 region 是表中的第一个 region。如果某个 region 同时具有空开始和空结束键则它是表中唯一的 region。 八、HBase特点 强的一致性读/写HBase不是“最终一致”的 数据库DataStore。它非常适合高速计数器聚合等任务。 自动分片HBase 表通过 region 分布在群集上并且随着数据的增长region 会自动分割和重新分配。自动的 RegionServer 故障转移。 Hadoop/HDFS 集成HBase 支持 HDFS 作为其分布式文件系统。 MapReduceHBase 支持通过 MapReduce 进行大规模并行处理将 HBase 当做数据来源和保存数据存储的数据库。 Java 客户端 APIHBase 支持易于使用的 Java API 以进行编程访问。 Thrift/REST APIHBase 还支持非 Java 前端的 Thrift 和 REST。 块缓存和布隆过滤器HBase 支持块缓存和布隆过滤器以实现大容量查询优化。 运维管理HBase 提供内置网页用于运维监控和 JMX 指标。 HBase 不支持行间事务。 九、HBase的使用场景
HBase适用于需要处理海量数据、需要高可靠性和高性能的场景。例如 对象存储如新闻、网页、图片等数据的存储。 用户画像特别是用户的画像是一个比较大的稀疏矩阵。 消息/订单存储在电信领域、银行领域不少的订单查询底层的存储以及通信、消息同步的应用都可以构建在HBase之上。
总的来说HBase是一个高性能、高可靠性、可扩展的分布式数据库适用于处理海量非结构化或结构化数据并能够满足近实时的读写管理需求。 博客主页https://lansonli.blog.csdn.net 欢迎点赞 收藏 ⭐留言 如有错误敬请指正 本文由 Lansonli 原创首发于 CSDN博客 停下休息的时候不要忘了别人还在奔跑希望大家抓紧时间学习全力奔赴更美好的生活✨