hadoop的生态系统
1, hbase简介
–HBase–HadoopDatabase,是一个高可靠性、高性能、面向列、可伸缩、实时读写的分布式数据库
–利用HadoopHDFS作为其文件存储系统,利用HadoopMapReduce来处理HBase中的海量数据,利用Zookeeper作为其分布式协同服务
–主要用来存储非结构化和半结构化的松散数据(列存NoSQL数据库)
高可用; 多备份, 分布式
高性能: 比mapreduce的性能高出许多
面向列: 存储模式是列族和列的存储模型
可伸缩: 集群可伸缩性
实时读写: 可毫秒级的响应, 可做在线数据库使用
半结构化: 通过flume导入的都是半结构化的数据
2, hbase的数据模型
和关系型数据库的对比, 按列存储
关系型存储模型:
hbase存储模型
1), rowkey: 相当于id
, 决定一行数据
, 按照字典顺序排序
, 只能存储64k
因为每次存储单元格时, rowkey都会被保存, 所以不要设置太大, 尽量为规则的数字最好, 长度相等
2), 列族(column family) , 列 (qualifier)
, hbase中每个列都属于某个列族, 列族必须作为表模式定义的一部分预先给出
, 列名以列族为前缀, 每个列族有多个列成员, 新的列 (qualifier) 按需动态加入
, 权限控制, 存储及调优都是在列族层面进行的
, hbase把同一列族的所有数据存储在同一目录下, 由几个文件保存
使用注意: 列族一般控制在3个以内, 多了会影响效率
一个列族可以包含百万级别的列
3), Timestamp
, hbase中每个cell存储对同一份数据有多个版本, 根据时间戳来区分的, 不同版本按时间倒叙排列, 默认取最新的
, 时间戳是64位整型
, 时间戳可以由hbase赋值, 此时时间戳精确到毫秒
, 时间戳可由客户显示复制, 如果程序要避免数据版本冲突, 必须生成唯一时间戳
4), hbase的Cell单元格
, 由行和列的坐标交叉决定
, 单元格是有版本的, 一次存储生成一个时间戳
, 内容是未解析的字节数组
由{rowkey,column(=<family> +<qualifier>),version}唯一确定的单元, cell中的数据都是字节码形式
5), HLog( WAL log), 日志, 用来做数据恢复的
–HLog文件就是一个普通的HadoopSequence File,SequenceFile 的Key是HLogKey对象,
HLogKey中记录了写入数据的归属信息,除了table和region名字外,
同时还包括sequence number和timestamp,timestamp是” 写入时间”,sequencenumber的起始值为0,
或者是最近一次存入文件系统中sequence number。
–HLogSequeceFile的Value是HBase的KeyValue对象,即对应HFile中的KeyValue。
3, hbase的体系架构
client:
包含访问hbase的接口并维护cache来加快对 hbase 的访问
zookeeper
zookeeper自己的高可用, 通过zookeeper自己的选件机制进行的
, 负责hbase节点的选取
, client请求meta后, 根据存储的region的寻址入口访问具体的region
, 实时健康那个regionserver的上线下线信息, 并通知master
, 存储hbase的schema和table的元数据
mater: 相当于namenode, 但不完全一样, 不保存原数据信息
负责总体调度, 但元素据信息保存在zookeeper中
, 分配region
, regionserver的负载均衡 (region分裂后)
, 发现失效的region server 并重新分配region
, 管理用户对table的增删改操作
hMaster挂掉, 不会影响读, 但会影响写
regionServer: 相当于datanode
, 维护region, 并处理region的io请求
, 负责切分在运行过程中变得过大的region
region: 保存表的一部分(可能有多个region) 一个region由多个store组成,
, HBase自动把表水平划分成多个区域(region),每个region会保存一个表里面某段连续的数据;
每个表一开始只有一个region,随着数据不断插入表,region不断增大,当增大到一个阀值的时候,region就会等分会两个新的region(裂变);
, 当table中的行不断增多,就会有越来越多的region。这样一张完整的表被保存在多个Regionserver上。
memstore: 内存中的临时存储
storefile: hdfs中存储的文件,
一个store对应一个列族(CF), 一个region由多个sotre组成, 一个列族不只有一个store
, store包括位于内存中的memstore和位于磁盘的storefile写操作先写入memstore,当memstore中的数据达到某个阈值,hregionserver会启动flashcache进程写入storefile,每次写入形成单独的一个storefile
, 当storefile文件的数量增长到一定阈值后,系统会进行合并(minor、majorcompaction),在合并过程中会进行版本合并和删除工作(majar),形成更大的storefile
, 当一个region所有storefile的大小和超过一定阈值后,会把当前的region分割为两个,并由hmaster分配到相应的regionserver服务器,实现负载均衡
, 客户端检索数据,先在memstore找,找不到再找storefile
Hbase的数据模型
HRegion是HBase中分布式存储和负载均衡的最小单元。最小单元就表示不同的Region可以分布在不同的HRegionserver上。
HRegion由一个或者多个Store组成,每个store保存一个columnsfamily。
每个Strore又由一个memStore和0至多个StoreFile组成。如图:StoreFile以HFile格式保存在HDFS上
梳理:
访问过程, client首先链接zookeeper, 然后转接到HMaster, 返回具体的数据存储节点HRegionServer, 每个regionserver有多个region, region包括一个HLog用来做数据恢复, 多个Store(对应一个列族), 每隔store包括一个内存文件存储memstore, 存储数据到达一定阈值以后, 存储在文件 StoreFile中, storefile到达阈值后, 会进行合并, 一个region到达阈值后, 会分裂为2个, 所以一张表可能有多个region进行保存.
系列来自尚学堂 极限班视频