网页搜索:
google分布式存储系统BigTable依赖GFS
Hbase(bigtable的开源实现): 高可靠、高性能、面向列、可伸缩
存储结构化和半结构化的数据
优点:
水平可扩展性特别好:
依赖:
文件存储系统:HDFS
海量数据处理:MapReduce
协同管理服务:Zookeeper
满足了:大数据量的实时计算
数据类型:
RDBMS:关系数据模型、多种数据类型
Hbase:
数据操作:
存储模式:
索引:
数据维护:
可伸缩性:
纵向扩展:
水平扩展:
Hbase的访问接口:
JAVA API
shell
thrift Gateway
restful Gateway
SQL接口:pig编写类sql hive用hivesql访问Hbase
Hbase的数据类型:
列限定符
每个值都是未解释的bytes
一个行可以有一个行键和多列
表由列族组成
Hbase数据模型:
列族支持动态扩展、保留旧版本(HDFS只能追加数据)
基础元素:
行键 : rowkey
列族
列限定符
单元格 (时间戳概念、对应数据版本)
坐标概念:
四维定位:行键、列族、列限定符、时间戳
稀疏表
HBASE:面向列的存储:高数据压缩率、分析便捷
RDBMS :面向行存储,事务性操作(记录完整)、不便于分析(需要全表扫描)
4.3 HBASE 的实现原理
4.3.1 库函数 、master服务器、region服务器
Master服务器:
分区信息进行维护和管理
维护region服务器列表
确认当前工作的region服务器
负责对region进行分配和负载平衡
对表的增删改查
region服务器:
客户端不依赖于Master获取位置信息
用户数据的存储和管理
Region服务器--10-1000个region -----Store是一个列族----每个列族就是一个Hfile----所有region公用1个Hlog
写数据流程:Region服务器---写缓存Memstore---写日志(Hlog)
读数据流程:Region服务器-读缓存Memstore(最新数据)----StoreFile
缓存刷新:周期性将缓存内容刷写到Storefile 清空缓存---Hlog写入标记
每次刷写会生成新的StoreFile 每个Store包含多个StoreFile
每个Region服务器都有一个自己的Hlog,将启动检查确认缓存刷新是否有新的内容需要刷写,发现则刷写新的storefile,完成后删除Hlog,开始对外提供服务
Storefile的合并,storefile 的数量达到阈值后,会进行合并。当Storefile超过大小阈值则会触发Region的分裂
4.4 Hlog的工作原理
Zookeeper负责监听region服务器,由master处理故障,通过故障服务器的Hlog恢复,按region切分Hlog,将region和对应的Hlog分配到新的region服务器上
一个HBASE表会被划分成多个Region(1G-2G 取决于服务器性能)
同一个region不会被拆分到不同服务器上
Region的寻找:
Meta表:regionID 服务器ID 存储元数据
Root表:只有一个region
三级寻址:
zookeeper文件---root表-多个meta表--多个用户数据表
客户端会有Hbase三层寻址的缓存,调用访问Hbase的接口,缓存失效后,再次寻址
zookeeper决定master服务器,确保只有一个master
4.5 Hbase的应用方案
性能优化:
1)时间靠近存放----将时间戳引入行键,使用Long.max-时间戳进行排序
2)提升读写性能,创建表时设置HcloumnDescriptor.setMemory=true,会将表放入内存的缓存中
3)节省存储·空间----设置最大版本数、保存最新版的数据,将最大版本参数设置为1
4)timetolive参数,会将过期数据自动清空
检测Hbase性能:
Maste-status(web浏览器查询)
ganglia
OpenTSDB
Armbari
sql 查询HBASE
1)hive整合hbase
2)Phoenix
Hbase 二级索引 (辅助索引)
默认只支持对rowkey进行索引
Hbase行访问:
1)单行键访问
2)确定起点和终点访问区间数据
3)全表扫描
二级索引样例:
Hindex Hbase+redis Solr+ Hbase
二级索引的机制:
Hbase Coprocessor
endpoint ---存储过程
observer----触发器
通过Observer监测数据插入动作,同步写入索引表,完成对表和列的索引
Hbase 主表 索引表
4.6 HBASE的shell命令
三种部署模式:单机 伪分布式 分布式
HDFS
创建表
create table, F1, F2, F3
list table
每次只能为1行的1列添加数据
put table R1,R1:C1 ,“1,2,3”
scan table R1,{column='R1:C1'}
get table
删除表:
disable table +drop table
4.7 JAVA API +HBASE
D2T (Disk to Tape)方式是传统保存备份数据方式,基本数据流程为:备份服务器按照既定策略,在相应时间发出控制命令,将生产服务器主盘的数据通过LAN或SAN备份到磁带机或磁带库中。随着磁带机及磁带技术的发展,磁带机的读/写速度及磁带容量已有了突飞猛进的发展,但由于磁带机及磁带是机械设备,其固有的上载、定位、下载、顺序读/写等特性,决定了当用户数量大、备份主机数目较多时,备份或恢复速度仍然较慢,尤其对大数据量的恢复。2. D2D保存备份数据方式随着基于SATA磁盘技术的戍熟及价格的下降, D2D (Disk to Disk)方式正逐渐被越来越多的用户采用,基本数据流程为:备份服务器按照既定策略,在相应时间发出控制命令,将生产服务器主盘的数据通过LAN或SAN备份到相应的磁盘设备中。3. D2D2T保存备份数据方式D2D2T (Disk to Disk to Tape)方式结合了传统磁带的离线管理和磁盘高速备份恢复的特性,基本数据流程为:备份服务器按照既定策略,在相应时间发出控制命令,将生产服务器主盘的数据通过LAN或SAN备份到相应的磁盘设备中。由相应生产主机或备份服务器(依备份架构而定)在既定时间自动将保存在备份磁盘中的数据复制到磁带库中。同时,缩短磁盘中相应备份数据的保存备份数据周期,从而可以将其覆盖新的备份数据,释放了备份磁盘的空间。欢迎分享,转载请注明来源:夏雨云
评论列表(0条)