Hbase的核心概念和安装

版权声明:所有内容原创,如需转载,请声明 https://blog.csdn.net/lovedopa/article/details/82857485

一 了解什么是Hbase

1.1 什么是HBase

HBASE是一个高可靠性、多版本、面向列、分布式的分布式存储系统,利用HBASE技术可在廉价PC Server上搭建起大规模结构化存储集群。

HBASE的目标是存储并处理大型的数据,更具体来说是仅需使用普通的硬件配置,就能够处理由成千上万的行和列所组成的大型数据。

HBASE是Google Bigtable的开源实现,但是也有很多不同之处。比如:Google Bigtable使用GFS作为其文件存储系统,HBASE利用Hadoop HDFS作为其文件存储系统;Google运行MAPREDUCE来处理Bigtable中的海量数据,HBASE同样利用Hadoop MapReduce来处理HBASE中的海量数据;Google Bigtable利用Chubby作为协同服务,HBASE利用Zookeeper作为协同服务。

Hbase从逻辑来说,就是一张很大的表,数据可以动态的增加。每一个cell中的数据可以有很多的版本,还具有向下提供存储,向上提供计算的特点。

1.2 Hbase体系架构

Hbase服务器遵从简单的服务器的架构,包括HRegionServer和HBaseMaster两部分组成。

HBase Master负责管理所有的RegionServer  而且Hbase中的所有的RegionServer都是用Zookeeper来协调的,并且会处理Hbase服务器运行期间可能遇到的错误。Hbase Master Server本身来说,不存储Hbase中的数据,他的数据(逻辑表)会被划分为很多的Region,然后存储到RegionServer集群中,Hbase Master,里面存储的是从数据到HRegionServer的映射.

1.3 Hbase中的重要的组件的作用

client :

是Hbase的客户端,使用了Hbase的RPC机制和HMaster以及HRegion Server进行通信,对于管理类的操作,client是和HRegionSever进行通信。

对于,数据读写,我们这里使用的是client和HRegionServer进行RPC通信。

Zookeeper:

作用:

1   进行HA操作,保证我的集群中,有而且只有1个HMASTER

2   存储Region的地址 ,HRegionServer会把自己的信息注册到zookeeper中让Hmaster可以管理整个集群的健康状况。

3  存储集群的上下线信息,通过和Master进行的通信,来实现,动态的上下线管理。

4 存储Hbase的Schema和table的元数据!

Hmaster

主要的任务有两个,一个是负责Table,一个是负责Region的管理工作!

  • 管理用户对Table的增删改查操作
  • 为RegionServer分配Region
  • 管理HRegionServer的负载均衡,调整Region分布
  • 在Region Split后,负责新Region的分配
  • 在HRegionServer停机后,负责失效HRegionServer上的Region迁移
  • HDFS上面的垃圾文件的回收
  • 处理Schema的更新请求。

HRegionServer

所有的数据库数据一般都是保存在Hadoop分布式文件系统上面的,用户通过一系列HRegion服务器获取这些数据,一台机器上面一般只运行一个HRegionServer,且每一个区段的HRegion也只会被一个HRegion服务器维护。

作用:

1  维护master分配给它的region,处理这些region的io请求

2 负责切分正在运行过程中变得过大的region

注意:

client访问hbase上的数据,不需要master的参加,因为数据读写,首先,需要访问到table的源数据信息,这个信息呢,保存在zookeeper上,根据schema信息,可以找到我们的region Server,所以数据的读写,访问的就是region Server,因此我们这里的master的负载真的很低。

HRegion

当表的大小超过设置值得时候,HBase会自动地将表划分为不同的区域,每个区域包含所有行的一个子集。对用户来说,每个表是一堆数据的集合,靠主键来区分。从物理上来说,一张表被拆分成了多块,每一块就是一个HRegion。我们用表名+开始/结束主键来区分每一个HRegion,一个HRegion会保存一个表里面某段连续的数据,从开始主键到结束主键,一张完整的表格是保存在多个HRegion上面。Region是最小的单元,一个Region只存储在1个RegionServer中。

每一个表,一般来说,只有1个Region,随着数据的不断插入,Region也不断增大,当Region某个列族达到一个阈值(默认是256),那么Region,就会被拆分为两个全新的Region。

Region由以下信息组成

<表名,startRowKey,创建时间>

目录表 -root .Meta 记录这个region的endKey

region被分配给那个RegionServer是完全动态的,所以,这里需要定位Region到底在哪一个regionServer中。

HLog和Hstore

这个是非常重要的

htstore 

两个部分组成 memStore  StoreFile

首先,存入内存,memStore

写满之后会flush成为 StoreFile (Hfile)

如果数据增长到了一定的阈值,会进行一个comapact(合并)的操作,把多个StoreFile合并,小文件会进行删除。所以,hbase只能进行数据的增加,更新和增加是在后面的comapact中进行的,这样呢,可以保证用户的写入操作只要进入到了内存就可以立刻返回,这样可以保证hbase io的高性能,当数据不断合并,storeFile就变得越来越大了,当数据呢,超过一定的范围,这时候呢,就会进行spilt操作,把当前的一个region Split为两个region,然后呢,父region会下线,之后,新产生的子region会被Hmaster分配给响应的HregionServer 中,这样,原来的1个region压力,会被分配给两个region,减少压力。

Hlog

Hlog,其实呢,就是1个普通的Hadoop Sequcence File

单一节点,我可以保证系统正常运行,数据不会丢失。但是,在分布式的系统中,如果说某一个节点HregionSever挂了,意外退出了,MemStore中的内存数据就会丢失。

为了解决这个问题,我们这里引入了Hlog,Hlog是一个Write Ahead Log的类,每次写入到内存中,也会写数据到HLog文件中,Hlog文件会定期滚动出新的,并且呢,删除旧文件,某一个节点HregionSever挂了,此时Hmaster会首先处理遗留的Hlog文件,然后把不同的Region中的log数据进行拆分,放到对应的Region的目录下面,然后,我吧失效的region重新分配。这些Hregion对应的HregionServer如果在loadHRegion的过程中,发现有我们的历史的HLog处理,就会把数据提取到内存memstore中,然后flush到storeFile,完成我们的数据恢复。

1.4  Hbase的数据模型

下面我们提供一张图来作为hbase的实例

HBase是一个类似于BigTable的分布式数据库,它是一个稀疏的长期存储的(存在硬盘上)、多维度的、排序的映射表。这张表的索引是行关键字、列关键字和时间戳。HBase的数据都是字符串,没有类型。
用户在表格中存储数据,每行都有一个可排序的主键和任意多的列。由于是系数存储,所以同一张表里面的每行数据都可以由截然不同的列。
列名字的格式是“<family>:<qualifier>”(<列簇>:<限定符>),都是有字符串组成的。每一张表有一个列簇(family)集合,这个集合是固定不变的,只能通过改变表结构来改变。但是限定符(qualifier)的值相对于每一行来说都是可以改变的。HBase把用一个列簇里面的数据存储在同一个目录底下,并且HBase的写操作时琐行的,每一行来说都是一个原子元素,都可以加锁。HBase所有数据库的更新都有一个时间戳标记,每个更新都是一个新的版本,HBase会保留一定数量的版本,这个值是可以设定的,客户端可以选择获取距离某个时间点最近的版本单元的值,或者一次获取所有版本单元的值。

1)逻辑模型
可以将表想象成一个大的映射关系,通过行健、行健+时间戳或者行健+列(列簇:列修饰符),就可以定位特定数据。由于HBase是稀疏存储数据的,所以某些列可以空白的。如下表,给出的是 www.cnn.com 网站的数据存放逻辑视图,表中仅有一行数据,行的唯一标识为"com.cnn.www" ,对这行数据的每一次逻辑修改都有一个时间戳关联对应。表中共有四列:contents:html、anchor:cnnsi.com、anchor:my.lock.ca、mime:type,每一行以前缀的方式给出其所属的列簇。

行健是数据行在表中的唯一标识,并作为检索记录的主键。在HBase中访问表中的行只有三种方式:通过当个行健访问;给定行健的范围访问;全表扫描。行健可以任意字符串(最大长度64KB)并按照字典序进行存储。对那些经常一起读取的行,需要对key值精心设计,以便它们能放在一起存储。

2)概念模型
HBase是按照列存储的稀疏行/列矩阵,物理模型实际上就是把概念模型中的一行进行切割,并按照列族存储,这点在进行数据设计和程序开发的时候必须牢记。上面的逻辑视图在物理存储的时候应该表现下面的样子:

从上图可以看出空值是不被存储的,所以查询时间戳为t8的“contents:html”将返回null,同样查询时间戳为t9,"anchor:my.lock.ca"的项也返回null。如果没有指明时间戳,那么应该返回指定列的最新数据,并且最新的值在表格里也是最先找到的,因为他们是按照时间排序的。所以,如果查询“contents”而不指明时间戳,将返回t6的数据,这种存储结构还有一个优势就是可以随时向表中的任何一个列族添加新列,而不需要事先说明。

二  Hbase的安装

待续

猜你喜欢

转载自blog.csdn.net/lovedopa/article/details/82857485