基本介绍
特点(高可靠、高性能、面向列、可伸缩)
非关系型数据库大数据实时处理
表规模达数十亿行及数百万列读、写访问可实时分布式存储系统
HDFS(Hadoop Distributed File System)文件存储ZooKeeper作为协同服务列存储
优点:有利于单列数据查询缺点:整行读取时效率较慢,需要多次IO操作与RDB(关系型数据库区别)
索引
多个索引(联合索引)行键(HBase)数据维护
当前值替换原值新增-版本号(HBase)可伸缩性
集群、分片、分库分表增加HRigionServer节点(HBase)使用场景
场景分析
海量数据(TB、PB)不需要事务特性处理(ACID)高吞吐量在海量数据中实现随机读取需要很好伸缩能力需要同时处理结构化和非结构化的数据案例
用户画像数据存储时序数据气象数据Cube分析NewSQLFeeds流消息、订单存储数据模型 (按Key排序,key-value结构)
行
行键(版本化时间戳)列
列族体系架构
Topic1
HMaster
负责管理和维护HBase表的分区信息维护Region服务器列表分配Region负载均衡HRegionServer
负责存储和维护分配给自己的Region处理来自客户端的读写请求Client
并不直接从Master读取数据,而是从HRegionServer上读取不依赖Master,通过Zookeeper获取Region位置信息三大功能组件
库函数:链接到每个客户端Master主服务器
管理用户对表的增删改查等操作实现不同Region服务器之间的负载均衡在Region分裂或合并后,负责重新调整Region的分布对发生故障失效的Region服务器上的Region进行迁移HRegionServer服务器
负责存储和维护分配给自己的Region处理来自客户端的读写请求Table
若干Region
若干Store
MemStoreStoreFile
BlockRegion (先找寻Meta Region地址,再通过地址找寻User Region)
Meta Region
记录每一个User Region的路由信息保存在内存中User Region
实际存储用户表数据关键流程
读写数据过程
用户写入请求被分配到HRegionServer去执行数据先写入Hlog中,再写入MemStore中,最终写到磁盘上形成StoreFile只有写入Hlog之后,commit()调用才会将其返回给客户端读取数据时首先访问MemStore缓存,如果找不到再去磁盘上的StoreFile中寻找缓存刷新
系统周期性的把MemStore缓存里的内容刷写到磁盘的StoreFile文件中,清空缓存,并在Hlog里面写入一个标记每次刷新都生成一个新的StoreFile文件,因此每个Store包含多个StoreFile文件每个HRegionServer都有自己的Hlog,每次启动都检查该文件,确认最近一次执行缓存刷新操作之后是否发生新的写入操作,如果有更新,则先写入MemStore,再刷写到StoreFile,开始为用户提供服务StoreFile的合并与分裂
每次刷写都会生成一个新的StoreFile,数量太多,影响查找速度调用Store.compact()把多个合并成一个合并比较耗费资源,只有数量达到一个阈值时才启动合并单个StoreFile过大时,又会触发分裂操作,一个父Region被分裂成两个子RegionHlog工作原理
保证系统恢复每个Region分配一个Hlog,采用WAL预写式日志(Write Ahead Log)先写Hlog日志,然后数据写入MemStore缓存,最后刷写到磁盘StoreFile中突出特点
Compaction(压缩/合并)
减少同一个Region中同一个ColumnFamily下面的小文件(HFile)数目,从而提升性能分为Minor、Major
Minor
小范围压缩,通常选一些连续时间范围的小文件进行合并Major
涉及该Region的ColumnFalimy下的所有的HFile文件压缩合并流程
put-> MemStore->HFile先Minor多个小文件HFile再Major多个HFileOpenScanner
StoreFileScanner读取HFile的数据MemStoreScanner读取MemStore的数据BloomFilter
随机快速判断数据是否存在
存在:存在误判不存在:结果可信BloomFilter数据保存在Hfile中性能优化
行键(Row Key)
字典序存储,将经常一起读取的数据存储到一块,将最近可能被访问的数据放在一块构建HBase二级缓存
只有一个针对行键的索引访问HBase中的行的三种方式
通过单个行键访问通过一个行键区间访问全表扫描如何构建二级索引 Comprocessor、Hindex
构建多个表索引构建多个列索引构建基于部分列值得索引常用Shell命令
create:创建表list:列出HBase中所有的表信息put:向表、行、列指定的单元格添加数据scan:浏览表的相关信息get:通过表名、行、列、时间戳、时间范围和版本号来获得相应单元格的值enable/disable:使表有效或无效drop:删除表
精彩链接
发表评论