分布式列存储数据库Hbase简述

分布式列存储数据库Hbase简述
Hadoop 可以通过 HDFS 来存储结构化、半结构甚⾄⾮结构化的数据,它是传统数据库的补充,是海量数据存储的最佳⽅法,它针对⼤⽂件的存储,批量访问和流式访问都做了优化,同时也通过多副本解决了容灾问题。但是 Hadoop 的缺陷在于它只能执⾏批处理,并且只能以顺序⽅式访问数据,这意味着即使是最简单的⼯作,也必须搜索整个数据集,⽆法实现对数据的随机访问。实现数据的随机访问是传统的关系型数据库所擅长的,但它们却不能⽤于海量数据的存储。在这种情况下,必须有⼀种新的⽅案来解决海量数据存储和随机访问的问题,HBase 就是其中之⼀ (HBase,Cassandra,couchDB,Dynamo 和 MongoDB 都能存储海量数据并⽀持随机访问),国内主要Hbase应⽤更为⼴泛。
基本概念
Hbase是构建在Hadoop⽂件系统之上的⾯向列存储的分布式数据库。我觉得HBase 是⼀个⾯向 列族 的分布式数据库更为贴切。表schema 仅定义列族,⼀个表可以有多个列族,每个列族可以包含任意数量的列,列由多个单元格(cell )组成,单元格可以存储多个版本的数据,多个版本数据以时间戳进⾏区分。
Row Key (⾏键)
Row Key 是⽤来检索记录的主键。想要访问 HBase Table 中的数据,只有以下三种⽅式:
通过指定的 Row Key 进⾏访问;
通过 Row Key 的 range 进⾏访问,即访问指定范围内的⾏;
泰拉星球进⾏全表扫描。
Row Key 可以是任意字符串,存储时数据按照 Row Key 的字典序进⾏排序。这⾥需要注意以下两点:
因为字典序对 Int 排序的结果是1,10,100,11,12,13,14,15,16,17,18,19,2,20,21,…,9,91,92,93,94,95,96,97,98,99。如果你使⽤整型的字符串作为⾏键,那么为了保持整型的⾃然序,⾏键必须⽤0 作左填充。
⾏的⼀次读写操作时原⼦性的 (不论⼀次读写多少列)。
Column Family(列族)
HBase 表中的每个列,都归属于某个列族。列族是表的 Schema 的⼀部分,所以列族需要在创建表时进⾏定义。列族的所有列都以列族名作为前缀,例如 courses:history,courses:math 都属于 courses 这个列族。
Column Qualifier (列限定符)
列限定符,你可以理解为是具体的列名,例如 courses:history,courses:math 都属于 courses 这个列族,它们的列限定符分别是history 和 math。需要注意的是列限定符不是表 Schema 的⼀部分,你可以在插⼊数据的过程中动态创建列。
Column(列)
HBase 中的列由列族和列限定符组成,它们由 :(冒号) 进⾏分隔,即⼀个完整的列名应该表述为 列族名 :列限定符。
Cell
Cell 是⾏,列族和列限定符的组合,并包含值和时间戳。你可以等价理解为关系型数据库中由指定⾏和指定列确定的⼀个单元格,但不同的是 HBase 中的⼀个单元格是由多个版本的数据组成的,每个版本的数据⽤时间戳进⾏区分。
Timestamp(时间戳)
HBase 中通过 row key 和 column 确定的为⼀个存储单元称为 Cell。每个 Cell 都保存着同⼀份数据的制定班级公约
多个版本。版本通过时间戳来索引,时间戳的类型是 64 位整型,时间戳可以由 HBase 在数据写⼊时⾃动赋值,也可以由客户显式指定。每个 Cell 中,不同版本的数据按照时间戳倒序排列,即最新的数据排在最前⾯。
Hbase 的表具有以下特点:
容量⼤:⼀个表可以有数⼗亿⾏,上百万列
⾯向列:数据是按照列存储,每⼀列都单独存放,数据即索引,在查询时可以只访问指定列的数据,有效地降低了系统的 I/O 负担稀疏性:空 (null) 列并不占⽤存储空间,表可以设计的⾮常稀疏
数据多版本:每个单元中的数据可以有多个版本,按照时间戳排序,新的数据在最上⾯
存储类型:所有数据的底层存储格式都是字节数组 (byte[])
存储结构
Regions
冠心病的护理计划HBase 表中的所有⾏按照 Row Key 的字典序排列。表通过⾏键的范围 (row key range) 被⽔平切分成多个 Region, ⼀个 Region 包含了在startkey和 endkey 之间的所有⾏。
每个表⼀开始只有⼀个 Region,随着数据不断增加,Region 会不断增⼤,当增⼤到⼀个阀值的时候,Region 就会拆分为两个新的Region。当 Table 中的⾏不断增多,就会有越来越多的 Region。
Region 是 HBase 中分布式存储和负载均衡的最⼩单元。这意味着不同的 Region 可以分布在不同的 Region Server 上。但⼀个 Region 是不会拆分到多个 Server 上的。
Region虽然是分布式存储的最⼩单元,但并不是存储的最⼩单元。事实上Region由⼀个或者多个Store组成,每个Store保存⼀个列族;每个Strore⼜由⼀个memStore和0⾄多个StoreFile组成;StoreFile以HFile格式保存在HDFS上。
Region Server
Region Server 运⾏在 HDFS 的 DataNode 上。它具有以下组件:
WAL(Write Ahead Log,预写⽇志):⽤于存储尚未进持久化存储的数据记录,以便在发⽣故障时进⾏恢复。
BlockCache:读缓存。它将频繁读取的数据存储在内存中,如果存储不⾜,它将按照 最近最少使⽤原则 清除多余的数据。
MemStore:写缓存。它存储尚未写⼊磁盘的新数据,并会在数据写⼊磁盘之前对其进⾏排序。每个 Region 上的每个列族都有⼀个MemStore。
HFile :将⾏数据按照 Key\Values 的形式存储在⽂件系统上。
Region Server 存取⼀个⼦表时,会创建⼀个 Region 对象,然后对表的每个列族创建⼀个 Store 实例,每个 Store 会有 0 个或多个StoreFile 与之对应,每个 StoreFile 则对应⼀个 HFile,HFile 就是实际存储在 HDFS 上的⽂件。
Hbase架构
主持与播音HBase 是⼀种类似于 Google’s Big Table 的数据模型的开源实现,它是 Hadoop ⽣态系统的⼀部分,它将数据存储在 HDFS 上,客户端可以通过 HBase 实现对 HDFS 上数据的随机访问。
HBase 系统遵循 Master/Salve 架构,由以下服务组成:
Zookeeper
插花艺术论文保证任何时候,集中只有⼀个 Master
存贮所有 Region 的寻址⼊⼝
实时监控 Region Server 的状态,将 Region Server 的上线和下线信息实时通知给 Master
存储 HBase 的 Schema,包括有哪些 Table,每个 Table 有哪些 Column Family 等信息
Master
为 Region Server 分配 Region
负责 Region Server 的负载均衡
发现失效的 Region Server 并重新分配其上的 Region
GFS 上的垃圾⽂件回收
处理 Schema 的更新请求
入目三分
RegionServer
Region Server 负责维护 Master 分配给它的 Region ,并处理发送到 Region 上的 IO 请求
Region Server 负责切分在运⾏过程中变得过⼤的 Region
服务之间的协作
HBase 使⽤ ZooKeeper 作为分布式协调服务来维护集中的服务器状。Zookeeper 负责维护可⽤服务列表,并提供服务故障通知等服务:
每个 Region Server 都会在 ZooKeeper 上创建⼀个临时节点,Master 通过 Zookeeper 的Watcher 机制对节点进⾏监控,从⽽可以发现新加⼊的 Region Server 或故障退出的 Region Server;
所有 Masters 会竞争性地在 Zookeeper 上创建同⼀个临时节点,由于Zookeeper只能有⼀个同名节点,所以必然只有⼀个 Master 能够创建成功,此时该 Master 就是主 Master,主 Master 会定期向Zookeeper 发送⼼跳。备⽤ Masters 则通过 Watcher 机制对主 HMaster 所在节点进⾏监听;
如果主 Master 未能定时发送⼼跳,则其持有的 Zookeeper 会话会过期,相应的临时节点也会被删除,这会触发定义在该节点上的Watcher 事件,使得备⽤的Master Servers 得到通知。所有备⽤的 Master Servers在接到通知后,会再次去竞争性地创建临时节点,完成主 Master 的选举。

本文发布于:2024-09-22 11:40:52,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/37834.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   访问   列族   服务   节点
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议