文章目录
一、Hadoop生态系统
二、HBase简介
1、HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩、实时读写的分布式数据库
2、利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为其分布式协同服务
3、主要用来存储非结构化和半结构化的松散数据(列存 NoSQL 数据库
三、HBase系统架构
1、HBase系统组成
以三台机器来讲,由一个直接点HMster和两个从节点HRegionServer组成。
2、HMaster介绍
(1)HMster的作用
①为RegionServer分配Region
②发现失效的Region并重新分配Region
③负责RegionServer的负载均衡
④管理用户对表的增、删、改请求(注意:针对表结构)
3、HRegionServe介绍
(1)HRegionServe的作用
①负责用户对表的IO请求
②负责切分运行过大的Region
(2)HRegionServerd的组成介绍
一个HRegionServer中有一个HLog、一个BlockCache、很多个Region,一个Region包含很多个store,一个store包含一个memstore和很多个storefile,
首先表在创建的时候只有一个Region,随着数据的不断写入,Region会越来越大,当它达到一定的阈值(10G)的时候,就会触发切分操作。
例如:有一个60G的数据要写入HBase,如果按章默认的切分策略,达到10G进行一次切分,那么导致进行多次切分,在切分的过程中是非常消耗资源的,而且会停止响应用户的请求,所以在线上环境中通常会将切分策略直接设为DisabkedRegionSplitPolicy,关闭自动切分,等待业务不繁忙的时候手动进行切分
HLOG文件就是一个普通的Hadoop Sequence File,Sequence File的Key是HLogKey对象,HLogKey中记录了写入数据的归属信息,除了table和region名字外,同时还包括sequence number和timestamp,timetamp是“写入时间”,sequence number 的起始值为0,或者是最近一次存入文件系统中sequence number。Hlog SequenceFile的value是HBase的KeyValue对象,即对应HFile中的KeyValue。
(3)HBase的读写流程
写流程:首先由客户端发起一个写请求,然后去连接zk获取meta表(meta表实际上是HBase中的一张表,记录着所有的用户表的Region的信息)的位置信息(meta表对应的Region所在的RegionServer的信息),假设meta表在node1,接下来就会去连接node1上的RS,读取meta表的数据,讲些图数据的Rowkey同meta表的数据进行对比,窄带Rowkey所对应的Region位置,假设在node2,然后就会去连接node2上的RS,将数据写入对应的Region中,首先会写入RS上的Hlog,然后再写入Region中的memstore,当memstore达到128M的时候,会进行flush操作形成storefile(以HFile形式存在于HDFS上)
读流程:找Rowkey所属的Region的步骤同写流程一致,假设Region在node2上,接下来就会取连接node2上的RS,首先回去BlockCache中找,如果没找到,再去memstore中找,如果在没找到,就回去storefile中查找,如果列簇的参数:BlockCache=true则会在找到的时候将其放入RS中的BlockCache不管是读还是写操作,在第一次找到了meta标的位置后,就会将其位置缓存,提高读写效率
四、HBase数据模型
1、HBase数据模型介绍
HRegion是HBase中分布式存储和负载均衡的最小单元。最小单元就表示不同的HRegion可以分布在不同的 HRegion server上。
HRegion由一个或者多个Store组成,每个store保存一个columns family。
每个Strore又由一个memStore和0至多个StoreFile组成。
2、Rowkey
唯一标识一行数据
可以通过RowKey获取一行数据
按照字典顺序排序的。
Row key只能存储64k的字节数据 10-100byte
3、Column Family(列族)和qualifier(列)
HBase表中的每个列都归属于某个列族,列族必须作为表模式(schema)定义的一部分预先给出。如 create ‘test’, ‘course’。
列名以列族作为前缀,每个“列族”都可以有多个列成员(column);如course:math, course:english, 新的列族成员(列)可以随后按需、动态加入。
权限控制、存储以及调优都是在列族层面进行的;
HBase把同一列族里面的数据存储在同一目录下,由几个文件保存。
4、Timestamp时间戳
在HBase每个cell存储单元对同一份数据有多个版本,根据唯一的时间戳来区分每个版本之间的差异,不同版本的数据按照时间倒序排序,最新的数据版本排在最前面。
时间戳的类型是 64位整型。
时间戳可以由HBase(在数据写入时自动)赋值,此时时间戳是精确到毫秒的当前系统时间
时间戳也可以由客户显式赋值,如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。
5、Cell单元格
由行和列的坐标交叉决定。
单元格是有版本的。
单元格的内容是未解析的字节数组。
由{row key, column( = +), version} 唯一确定的单元。cell中的数据是没有类型的,全部是字节码形式存贮。