HBASE

HBase原理介绍

  • 认识HBase

        HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PCServer上搭建起大规模集群。它是一个可以随机访问的存储和检索数据的平台。它不介意数据类型,允许动态的,灵活的数据模型。

HBase位于结构化存储层,Hadoop HDFS为HBase提供了高可靠性的底层存储支持,Hadoop MapReduce为HBase提供了高性能的计算能力,Zookeeper为HBase提供了稳定服务和failover机制。  

1)行键(RowKey)  

-- 行键是字节数组, 任何字符串都可以作为行键; 

-- 表中的行根据行键进行排序,数据按照Row key的字节序(byte order)排序存储; 

-- 所有对表的访问都要通过行键 (单个RowKey访问,或RowKey范围访问,或全表扫描) (二级索引)  

2)列族(ColumnFamily)  

-- CF必须在表定义时给出  

-- 每个CF可以有一个或多个列成员(ColumnQualifier),列成员不需要在表定义时给出,新的列族成员可以随后按需、动态加入  

-- 数据按CF分开存储,HBase所谓的列式存储就是根据CF分开存储(每个CF对应一个Store),这种设计非常适合于数据分析的情形  

3)时间戳(TimeStamp) 

 -- 每个Cell可能又多个版本,它们之间用时间戳区分  

4)单元格(Cell)  

-- Cell 由行键,列族:限定符,时间戳唯一决定,数据全部以字节码形式存储  

5)区域(Region)  

-- HBase自动把表水平(按Row)划分成多个区域(region),每个region会保存一个表里面某段连续的数据; 

-- 每个表一开始只有一个region,随着数据不断插入表,region不断增大,当增大到一个阀值的时候,region就会等分会两个新的region; 

-- 当table中的行不断增多,就会有越来越多的region。这样一张完整的表被保存在多个Region 上。  

-- HRegion是HBase中分布式存储和负载均衡的最小单元(默认256M)。最小单元表示不同的HRegion可以分布在不同的HRegionServer上。但一个HRegion不会拆分到多个server上。  

特点:  

无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态的增加,同一张表中不同的行可以有截然不同的列;  

面向列:面向列(族)的存储和权限控制,列(族)独立检索; 

稀疏:空(null)列并不占用存储空间,表可以设计的非常稀疏;

  • HBase结构:



其中HMaster节点用于:  

1.管理HRegionServer,实现其负载均衡。 

2.管理和分配HRegion,比如在HRegion split时分配新的HRegion;在HRegionServer退出时迁移其内的HRegion到其他HRegionServer上。 

3.实现DDL操作(Data Definition Language,namespace和table的增删改,column familiy的增删改等)。 

4.管理namespace和table的元数据(实际存储在HDFS上)。 

5.权限控制(ACL)。 

HRegionServer节点用于:  

1.存放和管理本地HRegion。 

2.读写HDFS,管理Table中的数据。 

3.Client直接通过HRegionServer读写数据(从HMaster中获取元数据,找到RowKey所在的HRegion/HRegionServer后)。 

ZooKeeper集群是协调系统,用于:  

1.存放整个 HBase集群的元数据以及集群的状态信息。 

2.实现HMaster主从节点的failover。 

HBase Client通过RPC方式和HMaster、HRegionServer通信;一个HRegionServer可以存放1000个HRegion;底层Table数据存储于HDFS中,而HRegion所处理的数据尽量和数据所在的DataNode在一起,实现数据的本地化;数据本地化并不是总能实现,比如在HRegion移动(如因Split)时,需要等下一次Compact才能继续回到本地化。

  • 读写示意图


写操作流程 

a)  Client发起了一个Put请求给HRegionServer  

b)  HRegionServer会将请求匹配到某个具体的HRegion上面  

c)  决定是否写WAL log。WAL log文件是一个标准的Hadoop SequenceFile,文件中存储了HLogKey,这些Keys包含了和实际数据对应的序列号,主要用于崩溃恢复。  

d) Put数据保存到MemStore中,同时检查MemStore状态,如果满了,则触发Flush to Disk请求。  

e)  HRegionServer处理Flush to Disk的请求,将数据写成HFile文件并存到HDFS上,并且存储最后写入的数据序列号,这样就可以知道哪些数据已经存入了永久存储的HDFS中。

 

读操作流程  

a)  client访问Zookeeper,查找-ROOT-表,获取.META.表信息。  

b) 从.META.表查找,获取存放目标数据的HRegion信息,从而找到对应的HRegionServer。  

c) 通过HRegionServer获取需要查找的数据。  

d) HRegionserver的内存分为MemStore和BlockCache两部分,MemStore主要用于写数据,BlockCache主要用于读数据。读请求先到MemStore中查数据,查不到就到BlockCache中查,再查不到就会到StoreFile上读,并把读的结果放入BlockCache。

  • Write-Ahead-Log(WAL)
该机制用于数据的容错和恢复:  

        每个HRegionServer中都有一个HLog对象,HLog是一个实现Write Ahead Log的类,在每次用户操作写入MemStore的同时,也会写一份数据到HLog文件中,HLog文件定期会滚动出新的,并删除旧的文件(已持久化到StoreFile中的数据)。当HRegionServer意外终止后,HMaster会通过Zookeeper感知到,HMaster首先会处理遗留的 HLog文件,将其中不同Region的Log数据进行拆分,分别放到相应region的目录下,然后再将失效的region重新分配,领取到这些region的HRegionServer在Load Region的过程中,会发现有历史HLog需要处理,因此会Replay HLog中的数据到MemStore中,然后flush到StoreFiles,完成数据恢复   

HBase容错性 

Master容错:Zookeeper重新选择一个新的Master 

--无Master过程中,数据读取仍照常进行,region切分、负载均衡等无法进行; 

RegionServer容错:定时向Zookeeper汇报心跳,如果一旦时间内未出现心跳,Master将该RegionServer上的Region重新分配到其他RegionServer上,失效服务器上“预写”日志由主服务器进行分割并派送给新的RegionServer 

Zookeeper容错:Zookeeper是一个可靠地服务,一般配置3或5个Zookeeper实例

  • HBase的优点  

1 列的可以动态增加,并且列为空就不存储数据,节省存储空间.  

2 Hbase自动切分数据,使得数据存储自动具有水平scalability.  

3 Hbase可以提供高并发读写操作的支持  

  • HBase的缺点:  

1 不能支持条件查询,只支持按照Row key来查询.  

2 暂时不能支持Master server的故障切换,当Master宕机后,整个存储系统就会挂掉.

  • HBase与传统数据库的比较
HBase是一个基于列模式的映射数据库,它只能表示很简单的键-数据的映射关系,这大大简化了传统的关系数据库。与关系数据库相比,它有如下特点:

一、数据类型

HBase只有简单的字符串类型,所有的类型都是交由用户自己处理的,它只保存字符串。         

而关系数据库有丰富的类型选择和存储方式。 

二、数据操作

HBase只有很简单的插入、查询、删除、清空等操作,表和表之间是分离的,没有复杂的表和表之间的关系,所以不能、也没有必要实现表和表之间的关联等操作。         

而传统的关系数据通常有各种各样的函数、连接操作。 

三、存储模式         

HBase是基于列存储的,每个列族都由几个文件保存,不同列族的文件是分离的。         

传统的关系数据库是基于表格结构和行模式保护的。 

四、数据维护          

确切的说,HBase的更新操作不应该叫做更新,虽然一个主键或列对应新的版本,但它的旧版本仍然会保留,所以它实际上是插入了新的数据,而不是传统关系数据库里面的替换修改。

五、可伸缩性          

HBase这类分布式数据库就是为了这个目的而开发出来的,所以它能够轻松地增加或减少(在硬件错误的时候)硬件数量,并且对错误的兼容性比较高。         

而传统的关系数据库通常需要增加中间层才能实现类似的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值