您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > Hbase 架构简介及实践
Hbase架构简介、实践Reportby李修鹏大纲•常用NoSQL数据库介绍•Hbase的架构介绍•Hbase的几个值得关注的地方••总结键值(Key-Value)存储数据库相关数据库TokyoCabinet/Tyrant、Redis、Voldemort、BerkeleyDB、SSDB典型应用内容缓存,适合混合工作负载并扩展大的数据集数据模型一系列键值对优势快速查询劣势存储的数据缺少结构化列存储数据库相关数据库相关数据库相关数据库相关数据库Cassandra,HBase,RiakCassandra,HBase,RiakCassandra,HBase,RiakCassandra,HBase,Riak典型应用分布式的文件系统以列簇式存储,将同一列数据数据模型以列簇式存储,将同一列数据存在一起优势查找速度快,可扩展性强,更容易进行分布式扩展劣势功能相对局限文档型数据库相关数据库相关数据库相关数据库相关数据库CouchDBCouchDBCouchDBCouchDB、、、、MongoDBMongoDBMongoDBMongoDB典型应用Web应用数据模型一系列键值对数据模型一系列键值对优势数据结构要求不严格劣势查询性能不高,而且缺乏统一的查询语法图形(Graph)数据库相关数据库相关数据库相关数据库相关数据库Neo4JNeo4JNeo4JNeo4J、、、、InfoGridInfoGridInfoGridInfoGrid、、、、InfiniteInfiniteInfiniteInfiniteGraphGraphGraphGraph典型应用社交网络,推荐系统等。专注于构建关系图谱数据模型图结构数据模型图结构强项利用图结构相关算法。弱项需要对整个图做计算才能得出结果,不容易做分布式的集群方案。分布式系统的CAP理论•一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。•可用性(A):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(可用性不仅包括读,还有写)不仅包括读,还有写)•分区容忍性(P):集群中的某些节点在无法联系后,集群整体是否还能继续进行服务。--HBase社区解释他们选择了CP,而Cassandra选择了AP列存储vs行存储三种基本的存储引擎--哈希存储引擎--B树存储引擎--LSM树(Log-StructuredMergeTree)存储引擎引擎Hbase主要适用场景主要适用场景主要适用场景主要适用场景•1大数据量(100sTB级数据)且有快速随机访问的需求。•2容量的优雅扩展•3业务场景简单,不需要关系数据库中很多•3业务场景简单,不需要关系数据库中很多特性(例如交叉列、交叉表,事务,连接等等)•4优化方面:合理设计rowkey。因为hbase的查询用rowkey是最高效的,也几乎的唯一生产环境可行的方式。总结•HBase实现存储,--列存储方案--LSM(LogStructuredMerge-Tree)对数据紧缩,使得数据存储效率不错,很适合据紧缩,使得数据存储效率不错,很适合大数据环境下的读操作,但是如果做删除数据(Compaction),由于列存储和LSM固有的特点,这时的处理效率不高。HBase系统架构图系统架构图系统架构图系统架构图体系结构•HMasterRegion分配、负载均衡定期扫描-ROOT-、.META.管理TableSchema分发close、flush、compact等管理消息集群管理:容错、扩容、日志分裂•Client索引查找数据增删改查操作管理操作•ZooKeeper•HRegionServer处理Client读、写、扫描请求与HMaster通信,处理管理消息Region的open、close、compaction、split、flush•ZooKeeper一个维护配置信息、名字空间,提供分布式同步、组管理的中心化协调服务存储master、regionserver、-meta-region的服务器地址-ROOT-表表表表&.META.表表表表Prefetching.META.rowsincaseonlywhenuseCacheissettotrue-ROOT-表表表表&.META.表表表表DropRoottable-ROOT-表表表表&.META.表表表表Hbase数据模型个性化推荐存储表结构RowkeyBaseinfo(CF)Modelinfo(CF)Recommendlist(CF)用户唯一标示类别喜欢(column)最好登录时间(column)长视频喜欢标签(column)短视频喜欢标签(column)用户选择标签(column)长视频推荐列表(column)短视频推荐列表(column)用户选择标签推荐列表(column)头条个性化推荐列表(column)实时播放视频历史记录rowkeyUgc视频视频视频视频(CF)版权视频版权视频版权视频版权视频(CF)Uid+date视频ID(column)视频ID(column)Hbase数据模型Hbase系统架构介绍系统架构介绍系统架构介绍系统架构介绍•负责响应用户I/O请求,向HDFS文件系统中读写数据,是HBase中最核心的模块。Hbase系统架构介绍系统架构介绍系统架构介绍系统架构介绍•HRegionServer内部管理了一系列HRegion对象,每个HRegion对应了Table中的一个Region,HRegion中由多个HStore组成。每个HStore对应了Table中的一个ColumnFamily的存储,可以看出每个ColumnFamily其实就是一个集中的存储出每个ColumnFamily其实就是一个集中的存储单元,因此最好将具备共同IO特性的column放在一个ColumnFamily中,这样最高效。数据物理存储•面向列存储面向列存储面向列存储面向列存储•HBase强一致性强一致性强一致性强一致性•HBase无副本机制无副本机制无副本机制无副本机制•由由由由HDFS提供副本机制提供副本机制提供副本机制提供副本机制,,,,保证可靠性保证可靠性保证可靠性保证可靠性Hbase系统架构介绍•HStore存储是HBase存储的核心了--MemStoreMemStore是SortedMemoryBuffer,用户写入的数据首先会放入MemStore,当MemStore满了以后会Flush成一个StoreFile--StoreFiles1、Hfile2、Compacta、、、、合并文件b、、、、清除删除、过期、多余版本的数据c、、、、提高读写数据的效率Hbase系统架构介绍•HBaseRegionsplitHbase系统架构介绍•HLog是一个实现WriteAheadLog的类,在每次用户操作写入MemStore的同时,也会写一份数据到HLog文件中(HLog文件格式见后续),HLog文件定期会滚动出新的,并删除旧的文件(已持久化到StoreFile中的数据)持久化到StoreFile中的数据)Demohbase的读取过程LSM-Tree+HTable(region分区)+Cache决定——客户端可以直接定位到要查数据所在的HRegionserver服务器,然后直接在服务器的一个region上查找要匹配的数据,并且这些数据部分是经过cache缓存的clientzookeeper1、获取meta所在regionserver地址clientMeta表Regionserver3、连接这个RegionServer,查到这条数据rowkeyinforegioninfoseqnumDuringOpenserverserverstartcodeTablename,startkey,timestamp,regionnameSTARTKEY、ENDKEY,regionNameaddress,regionnameregionName海量数据处理之bloomfilterhbase的读取过程ChangetheHFileFormat1、bloomfilter改进查找次数2、hbase的三维顺序,按照rowkey,column,ts进行排序,rowkey和column是升序,ts是降序3、对于一次随机读block的访问顺序是bloomblock、indexblock、datablock分块+分级索引(RootDataIndex、IntermediateLevelROOTINDEX、Leafindexblock)Hbase的几个值得关注的地方•BucketCache((((L2cacheonHBase))))•JavaGC改进改进改进改进(MSLAB&MemStoreChunkPool)•Compaction优化优化优化优化•PrefixTreeCompression•ProtocolBuffer作为序列化/反序列化引擎•ProtocolBuffer作为序列化/反序列化引擎•ROOT表已经改名为hbase:namespace,META则是hbase:meta•缩减缩减缩减缩减Regionserver宕机后的恢复时间宕机后的恢复时间宕机后的恢复时间宕机后的恢复时间•DeprecateHTablePoolinfavorofHConnection.getTable(...)•HBase的企业级数据库特性的企业级数据库特性的企业级数据库特性的企业级数据库特性((((SecondaryIndex、、、、Join和和和和Transaction))))•…….的的的的cache配置配置配置配置1、LruBlockCache,默认的BlockCache实现,也是目前使用的BlockCache2、SlabCache--SlabCache使用DirectMemory来存储block--SingleSizeCache的设计,导致内存使用率很低--SingleSizeCache的设计,导致内存使用率很低3、bucketcache--解决LruBlockCache的缺点及支持面向高性能读的大缓存空间.Hbase的的的的cache配置配置配置配置海量数据+高效的随机读性能–96G、128G内存?–直接采用SSD、Fusion-IO做底层存储介质?储介质?–L2Cache?-BucketCache(0.96)与LruBlockCache搭配,作为主要的内存cache方案使用作为二级缓存使用作为二级缓存使用作为二级缓存使用作为二级缓存使用,,,,将将将将Block缓存在缓存在缓存在缓存在高速盘高速盘高速盘高速盘(Fusion-IO)中中中中CacheblockinBucketCacheCacheBlock的时候,将Block放在一个RAMMap和一个Queue中,然后WriterThread异步从Queue中removeBlock写Queue中removeBlock写入到IOEngine(内存或高速盘)中,并将BlockKey及其位置、长度等信息记录在backingMapGetblockinBucketCacheGetBlock的时候,先访问RAMMap,然后访问然后访问backingMap获取block的位置及长度,从IOEngine读取数据BucketOrganizationinBucketAllocatorBucketOrganizationinBucketAllocatorBucketOrganizationinBucketAllocatorJavaGC改进改进改进改进(MSLAB&MemStoreChunkPool)MemstoreLAB避免申请小内存,一次申请大内存chunkMemStoreChunkPool维护chunk大内存chunkhbase.hregion.memstore.mslab.enabled是否启用MSLAB,默认truehbase.h
本文标题:Hbase 架构简介及实践
链接地址:https://www.777doc.com/doc-4310517 .html