资源描述
#,数据库原理及应用,电子科技大学,-,张凤荔,数据库系统原理与开发,7.2,列存储数据库,HBASE,的关键算法,HBASE,应用,API,HBase,的应用场景,【,本节学习目标,】,一,、,HBASE,的关键算法,1,区域(,Region,)的定位,2,高可用的保证,:Write-Ahead-Log,(,WAL,)保障数据高可用,组件高可用,3,数据的读写流程,4,区域服务器工作机制,-,区域分配、区域服务器上线下线,5,主服务器的工作机制,-,主服务器上线、下线,HBASE,的关键算法,基础,系统结构图,1,.,区域(,Region,)的定位,原理图,-ROOT,、,META,-ROOT-,:表包含,.META.,表所在的,region,列表,该表只会有一个,Region,;,Zookeeper,中记录了,-ROOT-,表的,location,。,.META.,:表包含所有的用户空间,region,列表,以及,RegionServer,的服务器地址。,1,.,区域(,Region,)的定位,-ROOT-,表永远不会被分割,只有一个区域,最多三次跳转就可以定位任意一个区域。,.META.,表的所有区域全部保存在内存中。客户通过,ZooKeeper,重新定位区域的信息。,一个表会包含很多个区域,分布存储在不同的服务器上。数据在,MemStore,内缓存,数据填满,生成,HFile,。,1.,区域(,Region,)的定位,寻址机制,-,从,Blog,里面寻找一条记录,特定,RowKey,值的数据。步骤如下:,(,1,)从,.META.,表查询包含该数据的,Region,。,(2),获取,Region,的,RegionServer,地址。,(3),连接,RegionServer,查到这条数据。,第一层,zookeeper,的文件,有,root region,的位置。,第二层,root region,保存了,.META.,和其它,region,的位置。,第三层是,.META.,,保存了所有数据表的,region,信息。,1.,区域(,Region,)的定位,(1)root region,永远不会被,split,,三次跳转,就能定位到任意,region,。,(2).META.,表每行保存一个,region,的位置,,rowkey,采用表名,+,表的最后一行编码而成。,(3).META.,表的全部,region,都保存在内存中。,(4)client,将查询过的位置信息保存缓存起来,缓存不会主动失效,如果缓存全部失效,则最多,6,次网络来回,定位到正确的,region(,其中三次用来发现缓存失效,另外三次用来获取位置信息,),。,2.,高可用的保证算法,Write-Ahead-Log,(,WAL,)保障数据高可用,分布式环境下 使用,HLog,恢复,.,HLog,机制是,WAL,(预写日志)的一种实现,每个区域服务器一个,HLog,的实例丢失。,HFile,由很多个数据块(,Block,)组成,结尾的数据块中包含了数据相关的索引信息。,区域服务器意外终止后,,HMaster,会通过,Zookeeper,感知,,HLog,完成数据恢复。,2.,高可用的保证算法,组件高可用体现在以下,3,个分布式组件上:,Master,容错,Master,出错,Zookeeper,重新选择一个新的,Master,。没有,Master,过程中,数据读取仍照常进行,,region,切分、负载均衡等无法进行。,区域服务器容错:,Zookeeper,检测区域服务器,失效后由主服务器进行分割并派送给新的区域服务器;,Zookeeper,容错:,Zookeeper,是一个可靠地服务,一般配置,3,或,5,个,Zookeeper,实例。,3.,数据的读写流程,-,读,(,1,)客户端通过,zookeeper,以及,root,表和,.META.,表查找,目标,Region,信息。,(,2,)联系区域服务器查询目标数据。,(,3,)区域服务器定位,发查询请求。,(,4,),region,先在,memstore,中查找,命中返回,(,5,)在,storefile,中 扫 描(可 能 会 扫 描 到 很 多 的,storefile,),寻址过程:,client-Zookeeper-ROOT-,表,-.META.,表,-RegionServer-Region-client,3.,数据的读写流程,-,写,(,1,),Client,通过,Zookeeper,的调度,向区域服务器发出写数据请求。,(,2,)区域服务器找到目标区域,(,3,)区域检查数据是否与,schema,一致,(,4,)如果客户端没有指定版本,则获取当前系统时间作为数据版本,(,5,)将更新写入,WAL log,(,6,)将更新写入,Memstore,。,(,7,)判断,Memstore,的是否需要,flush,为,Store,文件。,(8),单个,StoreFile,大小超过一定阈值后,触发,Split,操作。,3.,数据的读写流程,可靠性保证细节,使用,MemStore,和,StoreFile,存储对表的更新。,系统会在,zookeeper,中记录一个,redo point,,系统出现意外时,用,Log(WAL log),来恢复,checkpoint,之后的数据。,一个,Store,中的,StoreFile,达到一定的阈值后合并或分裂,split,。,4,.,区域服务器工作机制,1,)区域分配,-,一个区域只能分配给一个区域服务器。,master,可用的 区域服务器以及区域分配情况。,2,)区域服务器上线,-master,使用,zookeeper,来跟踪 区域服务器状态。区域服务器启动时,会先在,zookeeper,上的,server,目录下建立代表自己的,znode,。,3,)区域服务器下线,-zookeeper,的会话断开,,zookeeper,而自动释放代表这台,server,的文件上的独占锁。,master,会删除,znode,数据。,5.,master工作机制,-,上线,(,1,)从,zookeeper,上获取唯一一个代表,active master,的锁,阻止其它成为,master,。,(,2,)扫描,zookeeper,上的,server,父节点,获得当前可用的区域服务器列表。,(,3,)和每个区域服务器通信,获得当前已分配的,region,和区域服务器的对应关系。,(,4,)扫描,.META.region,的集合,计算得到当前还未分配的,region,,将他们放入待分配,region,列表。,5.,master工作机制,-,下,线,不参与表数据,IO,的过程,,master,下线仅导致所有元数据的修改被冻结,(,无法创建删除表,无法修改表的,schema,,无法进行,region,的负载均衡,无法处理,region,上下线,无法进行,region,的合并,唯一例外的是,region,的,split,可以正常进行,因为只有区域服务器参与,),,表的数据读写还可以正常进行。,master,下 线短时间内对整个,hbase,集群没有影响。,二、,HBASE,的,API,HBase,的,API,为客户端提供不同的访问方式来存取,Hbase,的数据,包括三个大类:,HBase Shell,,,JAVA client API,,,HBase,非,JAVA,存取方式。,HBASE,的,shell,HBase Shell,支持的命令包括通用命令:,status,提供,HBase,的状态,,version,提供正在使用,HBase,版本,,table_help,表引用命令提供帮助,,whoami,提供有关用户的信息等;,create,、,alter,、,drop,一个表,,list,列出,HBase,的所有表,,disable,、,enable,表等,HBASE,的,Java API,Java Admin API:,通过,API,编程来管理实现,DDL,功能。,org.apache.hadoop.hbase.client,包中有,HBaseAdmin,和,HTableDescriptor,这两个重要的类提供,DDL,功能。,Java client API:Java,提供了一个客户端,API,来实现,DML,功能,,CRUD,(创建检索更新删除)操作更多的是通过编程,在,org.apache.hadoop.hbase.client,包下。,HBASE,的,non-Java,和,Java,虚拟机通讯的语言,Language talking to the JVM,特定的协议的语言,Language with a custom protocol,HBASE,的一些约定语言,Thrift gateway specification for Hbase,Hbase,的,Map/Reduce,Hadoop,环境下的数据库和数据处理软件接口语言,Hive/Pig,三,、,HBASE,的应用场景,对象存储,时序数据,推荐画像,时空数据,CubeDB OLAP,消息,/,订单,Feeds,流,NewSQL,本节学习结束!,
展开阅读全文