HBase是一个高可靠、高性能、面向列、可伸缩的分布式数据库,它是谷歌BigTable的开源实现,主要用来存储非结构化和半结构化的松散数据。HBase的目标是处理非常庞大的表,可以通过水平拓展的方式,利用廉价计算机集群处理超过10亿行数据和数百万列元素组成的数据表。
HBase利用 Hadoop MapReduce来处理HBase中的海量数据,实现高性能计算,利用Zookeeper作为协同服务,实现稳定服务和失败恢复,使用HDFS作为高可靠的底层存储,利用廉价集群提供海量数据存储能力,当然,HBase也可以直接使用本地文件系统而不用HDFS作为底层数据存储方式,不过,为了提高数据可靠性和系统的健壮性,发挥HBase处理大数据量等功能,一般都使用HDFS作为HBase的底层数据存储方式。此外,为了方便在HBase上进行数据处理,Sqoop为HBase提供了高效、便捷的RDBMS数据导入功能,Pig和Hive为HBase提供了高层语言支持。HBase是BigTable的开源实现。
项目BigTableHBase文件存储系统GFSHDFS海量数据处理MapReduceHadoop MapReduce协同服务处理ChubbyZookeeper
HBase和BigTable的底层技术对应关系
HBase是一个稀疏、多维度、排序的映射表,这张表的索引是行键、列族、列限定符和时间戳。每个值都是未经解释的字符串,没有数据类型。
下面具体 介绍HBase数据模型的相关概念。
①表 HBase采用表来组织数据,表由行和列组成,列划分为若干个列族。
②行 每个HBase表都由若干行组成,每个行由行键来标识。访问表中的行只有三种方式:通过单个行键访问;通过一个行键的区间来访问;全表扫描。行键可以是任意 字符串。
③ 列族 一个HBase 表被分组成许多“列族”的集合,它是基本的访问控制单元。
④列限定符 列族里的数据通过列限定符来定位。列限定符不用事先定义,也不需要在不同行之间保持一致。列限定符没有数据类型,总被视为 字节数组byte[]。
⑤单元格 在HBase表中,通过行、列族和列限定符确定一个“单元格”。单元格中存储的数据没有数据类型,总被视为字节数组byte[]。
⑥时间戳 每个单元格都保存着同一份数据的多个 版本,这些版本采用时间戳进行索引。
HBase主要有3个主要的功能组件:一个Master主服务器,(负责 管理和维护HBase表的分区信息,同时也负责维护Region服务器列表。);库函数,(链接到每个客户端);许多个Region服务器(Region服务器负责存储和维护分配给自己的Region,处理来自客户端的读写请求)。
在一个HBase数据库中,存储了许多表。对于每个HBase表而言,表中的行是根据行键的值的字典序列进行维护的,表中包含的行的数量可能非常庞大,无法存储在一台机器上,需要分布式存储到多台机器上。因此,需要根据行键的值对表中的行进行分区,每个行区间构成一个分区,被称为“region”,宝行了位于某个值域区间内的所有数据,它是负载均衡和数据分发的基本单位,这些Region会被分发到不同的Region服务器上。
初始时,每个表只包含一个Region,随着数据的不断插入,region会持续增大,当一个Region中包含的行数量达到一个阀值时就会被自动分成两个新的Region。 每个Region的默认大小是100MB到200MB,它是HBase中负载均衡和数据分发的基本单位。
HBase的系统架构包括客户端、Zookeeper服务器、Master主服务器、Region服务器。HBase一般采用HDFS作为底层数据存储,所以可能会有HDFS和Hadoop。
①客户端:客户端包含访问HBase的接口,同时在缓存中维护这已经访问过的Region的位置信息。用爱加快后续数据访问过程。
②Zookeeper服务器:Zookeeper中保存了-ROOT-表的地址和Master的地址,客户端可以通过访问Zookeeper获得-ROOT-表的地址,并最终通过三级寻址找到所需的数据。Zookeeper不仅能够帮助维护当前的集群中机器的服务状态,而且能够帮助选出一个“总管”让这个“总管”来管理集群。
③Master主服务器:它主要负责表和Region的管理工作。
管理用户对表的增加、删除、修改、查询等操作。实现不同Region服务器之间的负载均衡。在Region分裂或者合并后,负责重新调整Region的分布。对发生故障失效的Region服务器上的Region进行迁移。④Region服务器:它是HBase中最核心的模块,负责维护分配给自己的Region,并相应用户的读写请求。