Hbase的简介与安装

目录

Hbase的简介与安装

HBase简介

HBase架构

HBase数据模型

逻辑模型

物理模型

Hbase和Hive的区别

HBase的部署与安装

软件准备

部署过程


Hbase的简介与安装

HBase简介

HBase是基于Hadoop的开源分布式数据库,它以Google的BigTable为原型,设计并实现了具有高可靠性、高性能、列存储、可伸缩、实时读写的分布式数据库系统。HBase不仅仅在其设计上不同于一般的关系型数据库,在功能上区别更大,表现在其适合于存储非结构化数据,而且HBase是基于列的而不是基于行的模式。就像BigTable利用GFS(Google文件系统)所提供的分布式存储一样,HBase在Hadoop之上提供了类似于BigTable的能力。

HBase架构

Hbase采用Master/Slave 架构,下图是Hbase体系架构,主节点运行的服务称头HMaster,从节点服务称为HRegionServer, 底层采用HDFS存储数据。为提供高可靠性,Hbase可以有多个HMaster,但同一时刻只可能有一个HMaster 作为主服务,为Hbase使用了ZooKeeper 来选定主HMaster,下面简单介绍体系架构中的各个实体。
 

Hbase的简介与安装_第1张图片

(1)Client

Client端使用Hbase的RPC机制与HMaster和HRegionServer进行通信,对管理类操作,Client 与HMaster进行RPC;对于数据读/写类操作, 与HRegionServer进行RPC。

(2)Zookeeper

Zookeeper中存储了root 表的地址、HMaster的地址和HRegionServer 地址,通过ZooKeeper, HMaster 可以随时感知到各个HRegionServer 的健康状态。此外,ZooKeeper也避免了HMaster 的单点故障问题,Hbase 中可以启动多个HMaster, 通过ZooKeeper的选举机制能够确保只有一个为当前整个Hbase集群的master。

(3)HMaster

即Hbase主节点,集群中每个时刻只有一个HMaster运行,HMaster 将Region分配给HRegionServer,协调HRegionServer 的负载并维护集群状态,HMaster 对外不提供数据服务,HRegionServer 负责所有Regions读/写请求。如果HRegionServer发生故障终止后,HMaster会通过ZooKeeper 感知到,HMaster 会根据相应的Log 文件,将失效的Regions重新分配,此外HMaster还管理用户对Table的增、刪、改、查操作。

HMaster的功能包括:

1.监控RegionServer

2.处理RegionServer故障转移

3.处理元数据的变更

4.处理region的分配或移除

5.在空闲时间进行数据的负载均衡

6.通过Zookeeper发布自己的位置给客户端

(4)HRegionServer

HRegionServer主要负责响应用户IO请求,向HDFS文件系统中读/写数据,其内部管理了一系列HRegion对象,当StoreFile大小超过一定阈值后,会触发Split 操作,即将当前Region拆成两个Region, 父Region会下线,新Split出的两个孩子Region 会被HMaster分配到相应的HRegionServer上。

功能包括:

1.负责存储HBase的实际数据

2.处理分配给它的Region

3.刷新缓存到HDFS

4.维护HLog

5.执行压缩

6.负责处理Region分片

组件包括:

1.Write-Ahead logs:HBase的修改记录,当对HBase读写数据的时候,数据不是直接写进磁盘,它会在内存中保留一段时间(时间以及数据量阈值可以设定)。但把数据保存在内存中可能有更高的概率引起数据丢失,为了解决这个问题,数据会先写在一个叫做Write-Ahead logfile的文件中,然后再写入内存中。所以在系统出现故障的时候,数据可以通过这个日志文件重建。

2. HFile:这是在磁盘上保存原始数据的实际的物理文件,是实际的存储文件。

3.Store:HFile存储在Store中,一个Store对应HBase表中的一个列簇。

4.MemStore:顾名思义,就是内存存储,位于内存中,用来保存当前的数据操作,所以当数据保存在WAL中之后,RegsionServer会在内存中存储键值对。

5.Region:Hbase表的分片,HBase表会根据RowKey值被切分成不同的region存储在RegionServer中,在一个RegionServer中可以有多个不同的region。

HBase数据模型

数据库一般以表的形式存储结构化数据,HBase也以表的形式存储数据,我们称用户对数据的组织形式位数据的逻辑模型,HBase里数据在HDFS上的具体存储形式则称为数据的物理模型。

逻辑模型

HBase以表的形式存储数据,每个表由行和列组成,每个列属于一个特定的列族(Column Family)。 表中的行和列确定的存储单元称为一个元素(Cell), 每个元素保存了同一份数据的多个版本,由时间戳(Time Stamp)来标识。

Hbase逻辑视图
区域(region) 行键(rowkey) 时间戳(timestamp) 列簇1(colume family)store
列1(colume) 列2(colume)
rowkey1 t2    
t1

 

RowKey: 行键,Table的主键,Table中的记录默认按照RowKey升序排序。

Timestamp:时间戳,每次数据操作对应的时间戳,可以看作是数据的version number。

Column Family:列簇,Table在水平方向有一个或者多个Column Family组成,一个Column Family中可以由任意多个Column组成,即Column Family支持动态扩展,无需预先定义Column的数量以及类型,所有Column均以二进制格式存储,用户需要自行进行类型转换。

Table & Region:当Table随着记录数不断增加而变大后,会逐渐分裂成多份splits,成为regions,一个region由[startkey,endkey)表示,不同的region会被Master分配给相应的RegionServer进行管理。.

可以把HBase看成一个多维度的Map模型去理解它的数据模型。正如下图,一个行键映射一个列族数组,列族数组中的每个列族又映射一个列标识数组,列标识数组中的每一个列标识(Column Qualifier)又映射到一个时间戳数组,里面是不同时间戳映射下不同版本的值,但是默认取最近时间的值,所以可以看成是列标识(Column Qualifier)和它所对应的值的映射。用户也可以通过HBase的API去同时获取到多个版本的单元数据的值。Row Key在HBase中也就相当于关系型数据库的主键,并且Row Key在创建表的时候就已经设置好,用户无法指定某个列作为Row Key。

Hbase的简介与安装_第2张图片

确定一个单元格的位置(cell),需要如下四个元素:

rowkey + Colume Family + Colume + timestamp(版本version),数据有版本的概念,即一个单元格可能有多个值,但是只有最新得一个对外显示。

 

物理模型

Hbase是按照列存储的稀疏行/列矩阵,其物理模型实际上就是把概念模型中的一个行进行分割,并按照列族存储。

HBase中有两张特殊的Table,-ROOT-和.META:

.META.:记录了用户表的Region信息,.META.可以有多个region

-ROOT-:记录了.META.表的Region信息,-ROOT-只有一个region

Zookeeper中记录了-ROOT-表的location,Client访问用户数据之前需要首先访问zookeeper,然后访问-ROOT-表,接着访问.META.表,最后才能找到用户数据的位置去访问,中间需要多次网络操作,不过client端会做cache缓存,注意:在0.96版本后,Hbase移除了-ROOT-表。

Hbase的简介与安装_第3张图片

 

HBase中的所有数据文件都存储在Hadoop HDFS文件系统上,主要包括两种文件类型:

1.HFile, HBase中KeyValue数据的存储格式,HFile是Hadoop的二进制格式文件,实际上StoreFile就是对HFile做了轻量级包装,即StoreFile底层就是HFile。HStore存储是HBase存储的核心了,其中由两部分组成,一部分是MemStore,一部分是StoreFiles。MemStore是Sorted Memory Buffer,用户写入的数据首先会放入MemStore,当MemStore满了以后会Flush成一个StoreFile(底层实现是HFile),当StoreFile文件数量增长到一定阈值,会触发Compact合并操作,将多个StoreFiles合并成一个StoreFile,合并过程中会进行版本合并和数据删除,因此可以看出HBase其实只有增加数据,所有的更新和删除操作都是在后续的compact过程中进行的,这使得用户的写操作只要进入内存中就可以立即返回,保证了HBase I/O的高性能。当StoreFiles Compact后,会逐步形成越来越大的StoreFile,当单个StoreFile大小超过一定阈值后,会触发Split操作,同时把当前Region Split成2个Region,父Region会下线,新Split出的2个孩子Region会被HMaster分配到相应的HRegionServer上,使得原先1个Region的压力得以分流到2个Region上。

2.HLog File,HBase中WAL(Write Ahead Log) 的存储格式,物理上是Hadoop的Sequence File。每个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和Hive的区别

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。

HBase是Hadoop的数据库,一个分布式、可扩展、大数据的存储。

区别:

1.Hive中的表为纯逻辑表,仅仅对表的元数据进行定义。Hive没有物理存储的功能,它完全依赖HDFS和MapReduce。这样就可以将结构化的数据文件映射为为一张数据库表,并提供完整的SQL查询功能,并将SQL语句最终转换为MapReduce任务进行运行。HBase表则是物理表,适合存放非结构化的数据。

2.Hive是在MapReduce的基础上对数据进行处理,而MapReduce的数据处理依照行模式;而HBase为列模式,这样使得对海量数据的随机访问变得可行。

3.HBase的存储表存储密度小,因而用户可以对行定义成不同的列;而Hive是逻辑表,属于稠密型,即定义列数,每一行对列数都有固定的数据。

4.Hive使用Hadoop来分析处理数据,而Hadoop系统是批处理系统,所以数据处理存在延时的问题;而HBase是准实时系统,可以实现数据的实时查询。

5.Hive没有row-level的更新,它适用于大量append-only数据集(如日志)的批任务处理。而基于HBase的查询,支持和row-level的更新。

6.Hive全面支持SQL,一般可以用来进行基于历史数据的挖掘、分析。而HBase不适用于有join,多级索引,表关系复杂的应用场景。

总结:

Hive和Hbase是两种基于Hadoop的不同技术–Hive是一种类SQL的引擎,并且运行MapReduce任务,Hbase是一种在Hadoop之上的NoSQL 的Key/vale数据库。当然,这两种工具是可以同时使用的。就像用Google来搜索,用FaceBook进行社交一样,Hive可以用来进行统计查询,HBase可以用来进行实时查询,数据也可以从Hive写到Hbase,设置再从Hbase写回Hive。

HBase的部署与安装

软件准备

Zookeeper集群、Hadoop集群。

本文部署的Hbase文件为:hbase-1.3.1-bin.tar.gz。

部署过程

(1)为集群所有服务器上传压缩包,并解压:

Hbase的简介与安装_第4张图片

(2)配置环境变量:

export HBASE_HOME=/opt/module/hbase-1.3.1
export PATH=$PATH:$HBASE_HOME/bin

(3)修改配置文件/opt/module/hbase-1.3.1/conf路径下的hbase-env.sh:

export JAVA_HOME=/opt/module/jdk1.8.0_121
export HBASE_MANAGES_ZK=false

如果使用的是JDK8以上版本,注释掉hbase-env.sh的45-47行,不然会报警告

(4)修改hbase-site.xml:

	  
		hbase.rootdir  
		hdfs://bigdata111:9000/hbase  
	

	
		hbase.cluster.distributed
		true
	

	
		hbase.master.port
		16000
	

	  
		hbase.zookeeper.quorum
		bigdata111:2181,bigdata112:2181,bigdata113:2181
	

	  
		hbase.zookeeper.property.dataDir
	 /opt/module/zookeeper-3.4.10/zkData
	


hbase.master.maxclockskew
180000

(5)修改regionservers文件:

Hbase的简介与安装_第5张图片

(6)启动Hbase

启动之前一定要先启动hadoop集群和zookeeper集群:

Hbase的简介与安装_第6张图片

启动Hbase:

Hbase的简介与安装_第7张图片

(7)访问web页面:

Hbase的简介与安装_第8张图片

Hbase配置成功。
参考文献:

[1]https://www.cnblogs.com/fmgao-technology/p/10416542.html#_label1

[2]https://blog.csdn.net/wshyb0314/article/details/81475475

[3]https://www.jianshu.com/p/ba9171784b65

 

你可能感兴趣的:(Hbase)