




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Oracle·WDPe·WDP分布式文件系统(数据库)Oracle高校大数据课程系列本课目标理解关系数据库的原理掌握内存kv数据库的原理及应用掌握列族数据库的原理掌握文档数据库的原理及应用Coursecatalogue课程目录关系数据库1KV内存数据库2列族数据库3文档数据库4关系数据库每个字段都被SQL定义成具体的数据类型,表示一定长度的字节序列字段的表示关系数据库
定长记录:它所包含的所有字段均为定长。记录的表示关系数据库
变长记录:允许它包含变长字段,有多重表示方法记录的表示关系数据库记录在磁盘上的物理存储方式有物理临接存储,指针连接存储。记录集合的存储结构关系数据库记录在磁盘上的物理存储方式有物理临接存储,指针连接存储。记录集合的存储结构关系数据库因应用不同有多种组织形式:堆文件、顺序文件、散列文件、按列存储。顺序文件:记录按某个搜索码的值的顺序进行存储。数据文件的组织形式关系数据库散列文件:直接存取文件或哈希文件,利用哈希函数将具有相同搜索码值的记录散列到外存(通常是磁盘)的同地址范围内。数据文件的组织形式关系数据库数据文件的组织形式关系数据库数据文件的组织形式关系数据库索引关系数据库顺序文件索引结构:文件按搜索码的顺序存储,索引记录按搜索码值排序---主索引。此种主索引可以是稀疏的,也可以是稠密的。关系数据库顺序文件索引结构:文件按搜索码的顺序存储,索引记录按搜索码值排序---主索引。此种主索引可以是稀疏的,也可以是稠密的。关系数据库多级索引有时二者经常结合使用建立多级索引,即先建立稠密主索引,然后在稠密主索引文件上建立稀疏索引。关系数据库辅助索引关系数据库B+树索引B+树索引可以作为主索引,也可以作为辅助索引。作为主索引时,可以是稀疏的,也可以是稠密的。关系数据库散列索引散列索引:散列函数h,搜索码值k,利用h(k)将记录分散到B个桶中的技术。根据B是否固定可有静态散列和动态散列两种方法。令搜索码经过散列并二进制序列化后的长度,N=4,当i=1时,说明有两个桶(0,1)Coursecatalogue课程目录关系数据库1KV内存数据库2列族数据库3文档数据库4关系数据库不擅长
关系数据库是一个通用性的数据库,并不能完全适应所有的用途。具体来说它并不擅长以下处理:大量数据的写入处理;为有数据更新的表做索引或表结构变更。字段不固定时应用。对简单查询需要快速返回结果的处理。关系数据库不擅长这是一张订单表。在用户界面中看起来像一个聚合结构,然而其数据却存放在关系型数据库的多张表中。每章表的行对应具体的数据。这样一来,如果在内存中使用了较为丰富的数据结构,那么要把它保存到磁盘之前,必须先将其转换成”关系“。于是就发生了“阻抗失谐”。阻抗失谐关系模型与聚合数据模型关系模型关系模型与聚合数据模型聚合数据模型关系模型与聚合数据模型构建数据存取模型(键值、文档数据库)关系模型与聚合数据模型构建数据存取模型(列族数据库)RAMCloud
RAMCloud是斯坦福大学提出的大规模集群下的纯内存KV数据库系统,最大的特点是读/写效率高,其设计目标是在数千台服务器规模下读取小对象速度能够达到5〜]0纳秒,这种速度是目前常规数据中心存储方案性能的50~1000倍。RAMCloud
每台存储服务器包含两个构件:Master和BackupMaster负责内存KV数据的存储并响应客户端读/写请求,Backup负责在外存存储管理其他服务器节点内存数据的数据备份。每个RAMCloud集群内包含唯一的管理节点,称之为协调器(Coordinator)协调器记载集群中的一些配置信息,比如各个存储服务器的IP地址等,另外还负责维护存储对象和存储服务器的映射关系,即某个存储对象是放在哪台服务器的,,RAMCloud的存储管理单位是子表(Tablet),即若干个主键有序的存储对象构成的集合,所以协调器记载的其实是子表和存储服务器之间的映射关系。RAMCloud整体架构RAMCloud
RAMCloud在内存和外存存储数据时都统一采用LSM树方案.其对应的Log结构被切割为8MB大小的数据片段(Segment)。RAMCloud整体架构RAMCloud
这个机制包含两个方面:一方面是将待备份的数据尽可能多地分散到不同备份服务器中,这样在恢复内存数据的时候每台备份服务器只需传递少量数据,增加并发性。另外一方面是将待重建的内存数据分散到多台存储服务器来恢复,这样也减少了每台服务器需要恢复的数据量,增加并发性。通过以上两种措施可以实现快速数据恢复,RAMCloud可以在1秒之内恢复崩溃的内存数据。数据恢复机制Redis
Redis是著名的内存KV数据库,在工业界获得了广泛使用其不仅支持基本数据类型,也支持列表、集合等复杂数据结构,所以有较强的表达能力,同时有非常高的单机读/写效率:Redis
系统中唯一的Master负责数据的读/写操作,可以有多个Slave来保存数据副本,副本数据只能读不能做数据更新操作。当Slave初次启动时,从Master获取数据,在数据复制过程中,Master是非阻塞的,即同时可以支持读/写操作。Master采用快照加增量的异步方式完成数据复制过程,首先在时刻T将内存数据写入本地快照文件,同时在内存记录从T时刻起新增的数据操作.当快照文件生成结束后,Master将文件传给Slave,Slave先保存为本地文件,然后将其加载入内存。之后,Master将T时刻后的数据变更操作以命令流的形式传给Slave,Slave顺序执行命令流,这样就达到数据和Master保持同步。Coursecatalogue课程目录关系数据库1KV内存数据库2列族数据库3文档数据库4HBASE
RegionServer:提供数据的读写服务,当客户端访问数据时,直接和RegionServer通信。HBaseMaster:Region的分配,.DDL操作(创建表,删除表)Zookeeper:是HDFS的一部分,维护一个活跃的集群状态。HadoopDataNode存储着RegionServer管理的数据,所有的Hbase数据存储在HDFS文件系统中,RegionServers在HDFSDataNode中是可配置的,并使数据存储靠近在它所需要的地方,就近服务,当王HBASE写数据时时Local的,但是当一个region被移动之后,Hbase的数据就不是Local的,除非做了压缩(compaction)操作。NameNode维护物理数据块的元数据信息。Hbase架构的组件HBASEHBaseTables通过行健的范围(rowkeyrange)被水平切分成多个Region,一个Region包含了所有的,在Region开始键和结束之内的行,Regions被分配到集群的节点上,成为RegionServers,提供数据的读写服务,一个regionserver可以服务1000个Region。RegionsHBASE分配Region,DDL操作(创建表,删除表)协调各个ReionServer:-在启动时分配Region、在恢复或是负载均衡时重新分配Region。-监控所有集群当中的RegionServer实例,从ZooKeeper中监听通知。管理功能:-提供创建、删除、更新表的接口。HBaseHMasterHBASEHbase使用Zookeeper作为分布式协调服务,来维护集群中的Server状态,ZooKeeper维护着哪些Server是活跃或是可用的。提供Server失败时的通知。Zookeeper使用一致性机制来保证公共的共享状态,注意,需要使用奇数的三台或是五台机器,保证一致。ZooKeeper:协调器HBASEZookeeper一般在分布式系统中的成员之间协调共享的状态信息,RegionServer和活跃的HMaster通过会话连接到Zookeeper,ZooKeeper维护短暂的阶段,通过心跳机制用于活跃的会话。每个RegionServer创建一个短暂的节点,HMaster监控这些节点发现可用的RegionServer,同时HMaster也监控这些节点的服务器故障。HMaster通过撞见一个临时的节点,Zookeeper决定其中一个HMaster作为活跃的。活跃的HMaster给ZooKeeper发送心跳信息,不活跃的HMaster在活跃的HMaster出现故障时,接受通知。组件之间如何工作如果一个RegionServer或是一个活跃的HMaster在发送心跳信息时失败或是出现了故障,则会话过期,相应的临时节点将被删除,监听器将因这些删除的节点更新通知信息,活跃的HMaster将监听RegionServer,并且将会恢复出现故障的RegionServer,不活跃的HMaster监听活跃的HMaster故障,如果一个活跃的HMaster出现故障,则不活跃的HMaster将会变得活跃。HBASE有一个特殊的Hbase目录表叫做Meta表,它拥有Region在集群中的位置信息,ZooKeeper存储着Meta表的位置。如下就是客户端首次读写Hbase所发生的事情:1.客户端从Zookeeper的Meta表中获取RegionServer。2.客户端将查询.META.服务器,获取它想访问的相对应的Region。Server的行健。客户端将缓存这些信息以及META表的位置。3.客户端将从相应的RegionServer获取行。Hbase的首次读与写如果再次读取,客户端将使用缓存来获取META的位置及之前的行健。这样时间久了,客户端不需要查询META表,除非Region移动所导致的丢失,这样的话,则将会重新查询更新缓存。HBASEMETA表集群中所有Region的列表.META.表像是一个B树.META.表结构为:-Key:regionstartkey,regionid-Values:RegionServerHbaseMETA表HBASERegionServer运行在HDFSDataNode上,并有如下组件:WAL:WriteAheadLog提前写日志是一个分布式文件系统上的文件,WAL存储没有持久化的新数据,用于故障恢复,类似Oracle的RedoLog。BlockCache:读缓存,它把频繁读取的数据放入内存中,采用LRU。MemStore:写缓存,存储来没有来得及写入磁盘的新数据,每一个region的每一个列族有一个MemStore。Hfiles:存储行,作为键值对,在硬盘上。RegionServer的组件HBASE当客户端提交一个Put请求,第一步是把数据写入WAL:-编辑到在磁盘上的WAL的文件,添加到WAL文件的末尾-WAL用于宕机恢复Hbase写步骤1HBASE一旦数据写入WAL,将会把它放到MemStore里,然后将返回一个ACk给客户端Hbase写步骤2HBASEMemStore存储以键值对的方式更新内存,和存储在HFile是一样的。每一个列族就有一个MemStore,以每个列族顺序的更新。MemStoreHBASE当MemStore积累到足够的数据,则整个排序后的集合被写到HDFS的新的HFile中,每个列族使用多个HFiles,列族包含真实的单元格,或者是键值对的实例,随着KeyValue键值对在MemStores中编辑排序后,作为文件刷新到磁盘上。注意列族是有数量限制的,每一个列族有一个MemStore,当MemStore满了,则进行刷新。它也会保持最后一次写的序列号,这让系统知道直到现在都有什么已经被持久化了。最高的序列号作为一个metafield存储在HFile中,来显示持久化在哪里结束,在哪里继续。当一个region启动后,读取序列号,最高的则作为新编辑的序列号。HBaseRegion刷新(Flush)HBASE数据存储在HFile,HFile存储键值,当MemStore积累到足够的数据,整个排序的键值集合会写入到HDFS中新的HFile中。这是一个顺序的写,非常快,能避免移动磁头。HBaseHFileHBASEHFile包含一个多层的索引,这样不必读取整个文件就能查找到数据,多层索引像一个B+树。键值对以升序存储。在64K的块中,索引通过行健指向键值对的数据。每个块有自己的叶子索引。每个块的最后的键被放入到一个中间索引中。根索引指向中间索引。HFile的结构trailer(追踪器)指向meta的块,并在持久化到文件的最后时被写入。trailer拥有bloom过滤器的信息以及时间范围(timerange)的信息。Bloom过滤器帮助跳过那些不含行健的文件,时间范围(timerange)则跳过那些不包含在时间范围内的文件。HBASE索引是在HFile打开并放入内存中时被加载的,这允许在单个磁盘上执行查找HFileIndexHBASE一个行的键值单元格可以被存储在很多地方,行单元格已经被存储到HFile中、在MemStore最近被更新的单元格、在Blockcache最佳被读取的单元格,所以当你读取一行数据时,系统怎么能把相对应的单元格内容返回呢?一次读把blockcache,MemStore,andHFiles中的键值合并的步骤如下:首先,扫描器(scanner)在读缓存的Blockcache寻找行单元格,最近读取的键值缓存在Blockcache中,当内存需要时刚使用过的(LeastRecentlyUsed)将会被丢弃。接下来,扫描器(scanner)将在MemStore中查找,以及在内存中最近被写入的写缓存。如果扫描器(scanner)在MemStore和BlockCache没有找到所有的数据,则HBase将使用BlockCache的索引以及bloom过滤器把含有目标的行单元格所在的HFiles加载到内存中。HBase读合并HBASE每个MemStore有许多HFiles文件,这样对一个读取操作来说,多个文件将不得不被多次检查,势必会影响性能,这种现象叫做读放大(readamplification)。HBase读合并HBASEHBase将会自动把小HFiles文件重写为大的HFiles文件,这个过程叫做minorcompaction。辅助压缩减少文件的数量,并执行合并排序HBase辅压缩(minorcompaction)HBASE主压缩将会合并和重写一个region的所有HFile文件,根据每个列族写一个HFile文件,并在这个过程中,删除deleted和expired的单元格,这将提高读性能。然而因为主压缩重写了所有的文件,这个过程中将会导致大量的磁盘IO操作以及网络拥堵。我们把这个过程叫做写放大(writeamplification)。HBase主压缩(MajorCompaction)HBASE一个表将被水平分割为一个或多个Region,一个Region包含相邻的起始键和结束键之间的行的排序后的区域。每个region默认1GB一个region的表通过RegionServer向客户端提供服务一个regionserver可以服务1000个regionRegion=临近的键HBASE初始时一个table在一个region中,当一个region变大之后,将会被分裂为2个子region,每个子Region代表一半的原始Region,在一个相同的Regionserver中并行打开。然后把分裂报告给HMaster。因为需要负载均衡的缘故,HMaster可能会调度新的Region移动到其他的Server上。Region分裂HBASE分裂一开始发生在相同的regionserver上,但是由于负载均衡的原因。HMaster可能会调度新的Region被移动到其他的服务器上。导致的结果是新的RegionServer提供数据的服务需要读取远端的HDFS节点。直到主压缩把数据文件移动到Regionsserver本地节点上,Hbase数据当写入时是本地的,但是当一个region移动(诸如负载均衡或是恢复操作等),它将不会是本地的,直到做了主压缩的操作(majorcompaction.)读负载均衡(ReadLoadBalancing)HBASE所有的读写操作发生在主节点上,HDFS复制WAL和HFile块,HFile复制是自动发生的,HBase依赖HDFS提供数据的安全当数据写入HDFS,本地化地写入一个拷贝,然后复制到第二个节点,然后复制到第三个节点。WAL文件和HFile文件通过磁盘和复制进行持久化,那么HBase怎么恢复还没来得及进行持久化到HFile中的MemStore更新呢?HDFS数据复制HBASE当一个RegionServer挂掉了,坏掉的Region不可用直到发现和恢复的步骤发生。Zookeeper决定节点的失败,然后失去regionserver的心跳。然后HMaster将会被通知RegionServer已经挂掉了。当HMaster检查到regionserver已经挂掉后,HMaster将会把故障Server上的Region重写分配到活跃的Regionservers上。为了恢复宕掉的regionserver,memstore将不会刷新到磁盘上,HMaster分裂属于regionserver的WAL到单独的文件,然后存储到新的regionservers的数据节点上,每个RegionServer从单独的分裂的WAL回放WAL。来重建坏掉的Region的MemStore。HBase故障恢复HBASEWAL文件包含编辑列表,一个编辑代表一个单独的put、delete.Edits是按时间的前后顺序排列地写入,为了持久化,增加的文件将会Append到WAL文件的末尾。当数据在内存中而没有持久化到磁盘上时失败了将会发生什么?通过读取WAL将WAL文件回放,添加和排序包含的edits到当前的MemStore,最后MemStore刷新将改变写入到HFile中。HBase故障恢复HBASEHBase架构的优点强一致模型:当写操作返回时,所有的读将看到一样的结果自动扩展:Regions随着数据变大
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论