目录 
	一.Hbase基本介绍 
	  
	  
	简介 
	  
	  
	与传统数据库对比 
	  
	  
	创建Hbase 
	3.1 基本结构 
	3.2 时间戳 
	3.3 行存储与列存储 
	3.4 keyvalue存储模型 
	  
	  
	二.Hbase功能与架构 
	  
	架构介绍 
	region的分类 
	zookeeper 
	  
	三.Hbase关键流程 
	  
	写流程 
	complication 
	Region Split 
	读流程 
	OpenScanner 
	  
	一.Hbase基本介绍 
	1.简介 
	HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统。 
	2.与传统数据库对比 
	  
	传统数据库(结构化数据库): 
	  
	数据结构固定。 
	需要预先定义好数据结构。 
	需要大量IO,扩展成本大。 
	  
	  
	  
	传统数据库处理的是结构化的数据,而大数据中80%的数据都是非结构化数据。故而需要使用非结构化数据库 
	  
	Hbase(非结构化数据库): 
	  
	分布式存储,面向列。 
	列无需事先定义,可实时扩展。 
	普通商用硬件支持,扩容成本低。 
	  
	  
	  
	3.创建Hbase 
	3.1 基本结构 
	HBase以表的形式存储数据。表有行和列族组成。列族划分为若干个列。其结构如下: 
	  
	创建一个Hbase表需要定义:表名,列族(cf),rowkey 
	  
	列族:列的集合。Hbase表中的每个列,都归属与某个列族。 
	rowkey:用来标识一条记录,由它来决定有几条记录。按照字典顺序进行排列,最大限制为64M。 
	  
	在创建Hbase表时不需要定义列名,在插入时定义即可。这也是与传统数据库的区别 
	3.2 时间戳 
	时间戳相当于一个版本号,用来区别同一列名的记录。Hbase默认显示最新时间戳的记录。 
	默认时间戳为1,在更新时间戳时,第一条记录并不会立即消失,而是会等到合并时再进行删除 
	  
	 如何确定一个单元格的内容? 
	在确认某一单元格的内容时,需要知道rowkey+cf(列族)+Q(列族)。并不需要知道时间戳,因为时间戳默认显示最新的记录。 
	  
	3.3 行存储与列存储 
	  
	 行存储:数据按行存储在底层文件系统中。通常,每一行会被分配固定的空间。 
	  
	优点:有利于增加/修改整行记录等操作;有利于整行数据的读取操作。 
	缺点:单列查询时,会读取一些不必要的数据。 
	  
	  
	  列存储:数据以列为单位,存储在底层文件系统中。 
	  
	优点:有利于面向单列数据的读取/统计等操作。 
	缺点:整行读取时,可能需要多次I/O操作。 
	  
	  
	  
	3.4 keyvalue存储模型 
	hbase本质上也是一种Key-Value存储系统。Key相当于RowKey,Value相当于列族数据的集合 
	  
	key就是用来标识信息,value用来存储实际的数据 
	二.Hbase功能与架构 
	1.架构介绍 
	  
	  
	DFS Client(文件系统客户端):HBase通过DFS Client对HDFS进行信息的写入 
	client(客户端):申请业务 
	zookeeper(高可靠):主备选举(选举主备Hmaster),在HBase中还用来存储元数据(region的元数据) 
	HMaster:为存入的(表)数据分配空间,对hregionserver进行管理 
	HRegionserver:对表数据进行维护 
	HRegion:存储(表)数据 
	一张完整的表可以在多个regionserver中的多个region当中,如果一个region失效,master就会对当前region中的数据进行迁移 
	HDFS为HBase提供高可靠的文件存储服务,HBase的数据全部存储在HDFS中。 
	Store:列族 
	Memstore:内存(写数据先写入内存,超过限制则写入storefile(也就是hfile)) 
	Hlog(日记):记录操作信息,数据信息,保证故障时能够恢复数据(多个region共享一个hlog) 
	  
	2.region的分类 
	  
	元数据region(meta
region):用来标识用户region的位置,存在zookeeper当中。 
	用户region(user
region) 
	  
	3.zookeeper 
	作用: 
	  
	分布锁机制:保证高可靠性,在一个分子节点对Hmaster进行主备的选举 
	监听:监听hmaster是否正常(相当于HDFS当中ZKFC的作用) 
	充当一个数据库的作用:用来存储元数据(meta region,regionserver的地址) 
	  
	三.Hbase关键流程 
	1.写流程 
	  
	client向zookeeper申请写入,hmaster分配一个写的空间 
	进行写入的时候,根据rowkey定位一个region(根据mata表定位在哪个regionserver中) 
	向regionserver申请写入 
	先写memstore,溢出后写入hfile 
	写入成功。若失败,向hmaster上报哪些数据写入失败,申请重写。 
	  
	2.complication 
	当Hfile数据越来越大之后,要进行合并(compaction) 
	目的:减少同一个region当中的小文件(小文件过多对资源的分配和调度都有影响) 
	  
	  
	minor(小合并):小范围合并,有文件合并数目的限制。(不会对文件读取的性能造成影响,造成的时延等很小。默认1h自动进行合并) 
	  
	  
	major:所有的hfile进行合并。(造成一小段时间的中断,不自动触发) 
	合并之后的数据存入HDFS中 
	  
	  
	3.Region Split 
	Region Split是指集群运行期间,某一个Region的大小超出了预设的阈值(10G),则需要将该Region自动分裂成为两个子Region。 
	分裂之后的region也是连续的,只是在相当于中间切了一刀 
	这里的分裂只是逻辑上进行分裂,实际上是在新的region中引用父region的文件(类似于我们在删除文件时,并不是真正的删除,而是将文件移入回收站) 
	4.读流程 
	  
	client向zookeeper申请读取数据 
	zookeeper定位region所在的regionserver。 
	向regionserver申请读数据 
	创建两种scanner读取memstore和hfile 
	  
	5.OpenScanner 
	OpenScanner的过程中,会创建两种不同的Scanner来读取Hfile、 MemStore的数据: 
	  
	HFile对应的Scanner为StoreFileScanner。 
	MemStore对应的Scanner为MemStoreScanner。 
想了解更多IT技术,欢迎访问 
 腾科教育.