欢迎投稿

今日深度:

hbase,

hbase,


HBase:
非关系型数据库。
高可靠性,高性能,面向列,可伸缩,实时读写。
主要用来存储非结构化和半结构化得松散数据。
非结构化():不是规定的数据。

1.数据量:十亿级别的行,百万级别的列;

2.速度快的原因:充分利用内存,使用了lsm树,缓冲机制,文件是有顺序性的。

3.数据模型:
a)row key : 相当于mysql的主键,唯一标识一行记录,row是字典序,长度最长为64K
b)column family 列族:一组列的集合,列族必须作为表的属性定义给出,列族是权限储存的最小单元,列族最好不超过3个
c)qulifier 列:可以动态的随机插入,表定义没有列的限制,随着值得插入也把列插入
b)timestamp 时间戳:64位整数,精度:毫秒,起到的是版本号的作用,一个cell中可以有多个版本的数据,时间戳可以自己定义,但一般不推荐。
e)cell 单元格:存储数据的最小单元(逻辑概念),存储的格式为:K+V
K:rowkey+column family +qulifier +timestamp
V:value
cell中存储没有数据类型的区分,存放的都是字节数组

4.HBase架构:hbase是主从架构
角色:
a)client:操作hbase的接口,并维护客户端的缓存
b)zookeeper:1.保证任何时刻集群中有且仅有一条active的master (高可用)
2.存储所有region的寻址入口,所有region元数据存储在那一台regionserver
3.监控regionserver的上线和下线信息,并及时通知给master
4.存储相关表的schema和table数据:
5.元数据保存在zookeeper中

	c)master :1.分配region
		  2.保证整个集群中的所有regionserver的负载均衡
		  3.当发现某一台regionserver宕机,重新分配上面的任务
		  4.当发现region变大进行裂变的时候,master去分配region到那一台regionserver
		  5.管理用户对table的曾删改操作
	d)regionserver(多个可伸缩) : 1.负责接收客户端的读写请求,处理region的IO
				     2.当某一个region变大之后,负责等分为两个region
				     3.一个表可以保存在多个regionserver中。
	e)region :1.相当于表的概念,一张表至少对应一个region
		   2.每一个表一开始只有一个region,随着数据不断插入表,当表过大时,region会进行裂变(平均切			     分)
		   3.hlog:记录操作记录,数据文件,可有通过hlog找回信息。
	f)store:1.相当于列族,
		2.角色:
			memstore(写缓冲):位于内存,每一个stort有一个memstore(64M写满之后会进行溢写)
				
			storefile(在hdf中叫Hfile:数据文件):磁盘存储空间,将数据持久化的存储位置
				  每一个region有一个或多个storefile
				  storefile可以进行合并操作,当storefile的数量增加到一定数量,会进行合并
				合并(minor、major)
				minor:简单合并不会影响读写效率,自动触发
				major:在合并的过程中会进行版本合并和删除工作,形成更大的stortfile。不要自动触发
		3.存储结构:使用LSM的数据结构

读流程:1.客户端向zk发生读请求
	2.从zk中拿到metadata储存的节点信息
	3.去存储metadata的节点获取对应region的所在位置
	4.访问对应的region获取数据
	5.先去memstore中查询数据,如果查到直接返回,
	6.如果没有查询到,取bloakcache中查询,如果找到直接返回
	7.如果没有找到去,storefile中查找数据,并将查询到的结果缓冲会自动添加到bloakcache中方便下次查找
	8.将信息返回给客户端
	主要:bloakcache是缓存,有大小限制,会有淘汰机制,淘汰最早的。

写流程:1.client向zk发生写请求
	2.从zk中拿到metadata的存储节点
	3.取储存metadata是节点获取对应的region
	4.访问对应的region写数据
	5.首先会想wal中写,写成功后会存储到metastore
	6.当metastore中的数据量到达阈值之后,会进行溢写溢写到storefile
	7.storefile时一个个小文件,会进行合并(minor,major)
	8.storefile时对hfile的封装,hfile是实际存储在HDFS上的文件

WAL:write ahead log
	防止数据丢失
	先写内存,在向hdfs是上溢写,但是是异步的方式
metadata:元数据

5.API

6.解决row key 过大的方法:(对象的方式保存)
Protocol Buffers:是一种轻便高效的结构化数据存储格式,可用于结构化数据串,或者说序列化。
安装: 1.准备工作 yum groupinstall Development tools
2.解压压缩包。
3. ./configure --prefix=/opt 创建makefile 文件
4.编译和安装 make $$ make install

书写:	1.包名 package
	2.类名	message
	3.属性   required int32  id-1;	
		 required string str=2; 1.2位序列化顺序
	4.文件名必须以.proto结尾

应用:protoc --java=s生成目录 元文件

message PhoneNumber {
required string number = 1;
optional PhoneType type = 2 [default = HOME];
}
repeated PhoneNumber phone = 4;
}

7.hbase优化:三个方面:
1.表的设计
2.写表操作
3.读表操作

1.表的设计:
	a)提前设定好切分region的分区
	b)row key 的设计。实际10到100字节,越短越好,满足需求,散列型
	c)column family 列族的设计,不要超过2个,一个memStore满是条件百分之80,会带动所有memstore进行溢写
	d)in memory 读缓存
	e)max version 最大版本
	f)time to live 设置表中的存储生命期
	g)compact&spilt 合并和切分 
		Storefile 是只读的一旦创建不能修改,因此hbase是不断追加
		选择好合并时间。
2.写表操作:
	a)多个htabe并发写
	b)htable的设计:日志什么
	c)批量写:
	d)多线程并发写
3.读表操作:
	a)多个htable并发读
	b)读缓存.三种设置。
		只读列族,增加条件
	c)批量读
	d)缓存 redis

8:启动 start-hbase.sh
hbase shell

www.htsjk.Com true http://www.htsjk.com/hbase/37437.html NewsArticle hbase, HBase: 非关系型数据库。 高可靠性,高性能,面向列,可伸缩,实时读写。 主要用来存储非结构化和半结构化得松散数据。 非结构化():不是规定的数据。 1.数据量:十亿级别...
相关文章
    暂无相关文章
评论暂时关闭