之前了解过Yarn,这次再初步了解下 Hbase和Hive。

 

HBase:

HBase是Apache Hadoop的数据库,能够对大型数据提供随机、实时的读写访问。

HBase是一个开源的、分布式的、多版本的、面向列的存储模型。

HBase存储的是松散型数据。

HBase存储的数据从逻辑上来看就像一张很大的表,并且它的数据列可以根据需要动态增加。

 

单机模式下运行HBase,首先启动ZooKeeper,然后启动HBase Master,最后启动HBase RegionServer

停止HBase时候,首先停止HBase Master,然后停止ZooKeeper。

 

HBase体系结构:

遵从简单的主从服务器架构,由HRegion服务器群和HBaseMaster服务器构成。

HBaseMaster服务器负责管理所有的HRegion服务器,在其上存储的是从数据到HRegionServer的映射。

HBase逻辑上的表可能会被划分成多个HRegion,然后存储到HRegion Server群中。

 

HRegion:表名+开始/结束主键,一个HRegion会保存一个表里面某段连续的数据。

HRegion服务器:一台机器上面一般只运行一个HRegion服务器,且每一个区段的HRegion也只会被一个HRegion服务器维护。

HBase Master服务器: 每台HRegion服务器都会和HMaster服务器通信,HMaster的主要任务就是要告诉每台HRegion服务器它要维护哪些HRegion。
META表:HRegion的表达符定义为tablename+startkey+regionID,这些数据就是元数据,存放元数据(META)的表为元数据表。
ROOT表:保存所有元数据表的位置,且根数据表是不能被拆分的,永远只存在一个HRegion。

注意:ROOT表包含META表所在的区域列表,META表包含所有的用户空间区域列表,以及Region服务器地址。

 

HBase数据模型:

HBase是一个类似Bigtable的分布式数据库,它是一个稀疏的长期存储的、多维度的、排序的映射表。
HBase表的索引是行关键字、列关键字和时间戳。HBase中的数据都是字符串,没有类型。
列名字的格式是“<family>:<qualifier>”,都是由字符串组成的。HBase所有数据库的更新都有一个时间戳标记。
 
HBase与RDBMS:
数据类型:HBase只有简单的字符串类型。而关     系数据库有丰富的类型选择和存储方式。
数据操作:HBase只有很简单的一些操作,且表和表之间是分离的。而传统的关系数据通常有各种各样的函数、连接操作。
存储模式:HBase是基于列存储的。传统的关系数据库是基于表格结构和行模式保存的。
数据维护:HBase在更新时,一个主键或列的旧版本仍会保留,它实际上是插入了新数据。而传统关系数据库是替换修改。
可伸缩性:HBase数据库就是为了这个目的开发的,所以它能够轻易地增加或减少硬件的数量。而传统关系数据库通常需要增加中间层才能实现类似功能。
由于HBase具有时间戳特性,所以它特别适合开发wiki、archiveory之类的服务,并且它原本就是作为一个搜索引擎的一部分开发出来的。
 
 
HBase 不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库.所谓非结构化数据存储就是说HBase是基于列的而不是基于行的模式,这样方面读写你的大数据内容。
 

HBase是介于Map Entry(key & value)和DB Row之间的一种数据存储方式。就点有点类似于现在流行的Memcache,但不仅仅是简单的一个key对应一个 value,你很可能需要存储多个属性的数据结构,但没有传统数据库表中那么多的关联关系,这就是所谓的松散数据。

简单来说,你在HBase中的表创建的可以看做是一张很大的表,而这个表的属性可以根据需求去动态增加,在HBase中没有表与表之间关联查询。你只需要 告诉你的数据存储到Hbase的那个column families 就可以了,不需要指定它的具体类型:char,varchar,int,tinyint,text等等。但是你需要注意HBase中不包含事务此类的功 能。

 

什么是列存储?

列存储不同于传统的关系型数据库,其数据在表中是按行存储的,

列方式所带来的重要好处之一就是,由于查询中的选择规则是通过列来定义的,因 此整个数据库是自动索引化的。

按列存储每个字段的数据聚集存储,在查询只需要少数几个字段的时候,能大大减少读取的数据量,一个字段的数据聚集存储,那就 更容易为这种聚集存储设计更好的压缩/解压算法。

 

 

读取一行记录HBase是如何进行工作的,

首先HBase Client端会连接Zookeeper Qurom(从下面的代码也能看出来,例如:HBASE_CONFIG.set("hbase.zookeeper.quorum", "192.168.50.216") )。

通过Zookeeper组件Client能获知哪个Server管理-ROOT- Region。

那么Client就去访问管理-ROOT-的Server,在META中记录了HBase中所有表信息,

(你可以使用 scan '.META.' 命令列出你创建的所有表的详细信息),

从而获取Region分布的信息。

一旦Client获取了这一行的位置信息,比如这一行属于哪个Region,Client将会缓存这个信息并直接访问HRegionServer。久而久之Client缓存的信息渐渐增多,即使不访问.META.表也能知道去访问哪个HRegionServer。

HBase中包含两种基本类型的文件,一种用于存储WAL的log,另一种用于存储具体的数据,这些数据都通过DFS Client和分布式的文件系统HDFS进行交互实现存储。

 

再来看看HBase的一些内存实现原理:

  • HMaster— HBase中仅有一个Master server。
  • HRegionServer—负责多个HRegion使之能向client端提供服务,在HBase cluster中会存在多个HRegionServer。
  • ServerManager—负责管理Region server信息,如每个Region server的HServerInfo(这个对象包含HServerAddress和startCode),已load Region个数,死亡的Region server列表
  • RegionManager—负责将region分配到region server的具体工作,还监视root和meta 这2个系统级的region状态。
  • RootScanner—定期扫描root region,以发现没有分配的meta region。
  • MetaScanner—定期扫描meta region,以发现没有分配的user region。

 

HBase中模式设计具体例子:

 

posted on 2015-04-18 10:29  黄瓜小肥皂  阅读(139)  评论(0编辑  收藏  举报