Hbase特点:
海量存储:适合PB级别的海量数据,,hbase有良好的扩展性
列式存储:根据列族来存储数据的
极易扩展:
高并发:
稀疏存储:数据为空的情况下不占用存储空间
Hbase架构图:
Hbase通过zk来做master的高可用,regionServer的监控、元数据的入口以及集群配置的维护,通过zk来保证只有一个master在运行,通过竞争机制产生master;zk来监控regionserver状态,regionserver有异常的时候,通过回调的形式通知master regionserver上下线的信息;通过zk存储元数据的同一入口地址;
Hmaster:为regionserver分配region;维护整个集群的负载均衡;维护集群的元数据信息;发现失效的region,将失效的region分配到正常的regionserver上;regionserver失效时,协调对应Hlog的拆分。HregionServer:处理用户的读写请求,是真正执行读写的节点,包括:管理master为其分配的region;处理来自客户端的读写请求;负责和底层HDFS的交互,存储数据到HDFS;负责region变大以后的拆分;负责Storefile的合并工作;
Hlog:编辑日志,通过Hlog回滚
Region:相当于表(一个或者多个表),region可以进行切分的,数据量较大时,会将region进行切分(实现负载均衡),会有多个region,
Store:相当于列族,一个region中可以有多个列族,列不能抛开列族单独存在
Store file:在磁盘中存储的文件,以Hfile的存储格式存储,以Hfile存在HDFS上,
Rowkey的设计原则:
Rowkey的长度可以是任意的字符串,最大长度是64Kb,在实际中一般为10-100个字节,一般来说越短越好,hbase会将部分数据加载到内存中,rowkey过长,内存的有效利用率会下降
Rowkey散列原则:目的是使数据均衡分布,各个regionserver负载均衡
Rowkey唯一原则:保证唯一性,rowkey是按照字典顺序排序存储的
Hbase数据结构:
Rowkey:用来检索记录的主键,访问hbase tabe 中的行有三种方式:单个rk访问;扫描rk的range(正则);全表扫描;
Column Family:列族,是表的一部分,必须在使用表之前定义,列名都以列族为前缀。
Cell:相当于一个单元格,又行键,列名,版本唯一确定。Cell中的数据是没有类型的,全部以字节码的形式存储,
Timestamp:版本通过时间戳来索引,时间戳的类型是64位整型,每个cell中,不同版本的数据按照时间倒序排序,时间戳可以由用户显示的赋值,也可以取当前系统时间
Hbase读数据流程:
Hbase写数据流程:(不需要与磁盘交互,所以快)
数据Flush过程:
当MenStore数据达到阈值(默认是128M,老版本64M),将数据刷到磁盘,将内存中的数据删除,同时删除Hlog中的历史数据;
并将数据存储到HDFS中;
在Hlog中做标记;
【注 刷写的触发条件】
Regionserver超过堆内存的40%会执行刷写;
Menstore中时间超过一个小时;
Region的内存超过128M的时候触发,由master触发,由regionserver执行
数据合并过程:
【注****合并触发条件】
Hfile默认7天合并一次;
Flush为hfile时,超过3个hfile就会对这些文件进行合并
Hive VS hbase:
Hive:是基于hadoop的一个数仓工具,可以将结构化的数据文件映射为数据库表,并提供简单的SQL查询;hive本身不存储和计算数据,完全依赖于HDFS和MR,hive用HDFS存储,用MR进行计算,hive是将SQL转换成map-reduce程序;
Hbase:是hadoop的数据库,是物理表,是一个菲关系型数据库
联系:
Hbase主要解决的是实时数据查询问题,hive主要解决数据的处理和计算,
在大数据架构中,hive和hbase是协作的关系,通过hive对原始数据的清洗,处理和计算,hive处理后的数据可存入hbase中,数据从hbase中检索;
Hbase VS MySQL:
关系型数据库:
优点:数据之间有关系,进行增删改查很方便;
有事务操作,保证数据的完整性和一致性;
缺点:无法对海量数据进行处理,适合一般量级的数据;
Hbase:
优点:列是可以动态增加的,cell没有数据时,是不占存储空间的
Hbase自动进行切分数据,能够实现负载均衡
缺点:不能支持条件查询,只能按照rowkey查询
数据类型:hbase中只有字节码类型,所有的类型都由用户自己进行处理,关系型数据库中是有不同的数据类型的
数据操作:hbase只有简单的增删改查操作,表与表之间是分离的,关系型数据库有各种各样的连接操作和函数处理
存储模式:hbase是基于列族存储的,存储的数据量较大,关系型数据库是基于表格结构和行模式存储的;
可伸展性:hbase是一个分布式数据库,很容易扩展存储空间,而且容错性比较高
Hbase优化:
高可用:hmaster负责监控regionserver的生命周期,实现负载均衡,如果Hmaster挂掉了,配置高可用 hmaster节点,所以这种不健康的状态不会持续很长时间;
预分区:提前将分区大致规划好
Rowkey设计:设计的目的是让数据均匀的分布于region中,一定程度上防止数据倾斜,可以hash取值,
内存优化:提高堆内存空间
为什么会有列族:
一行有若干列组成,若干列又构成一个列族(column family),这不仅有助于构建数据的语义边界或者局部边界,还有助于给他们设置某些特性(如压缩),或者指示他们存贮在内存中,一个列族的所有列存贮在同一个底层的存储文件中,这个存储文件叫做HFile。