SlideShare ist ein Scribd-Unternehmen logo
1 von 47
Downloaden Sie, um offline zu lesen
Hbase架构简介、实践 
Report by 李修鹏
大纲 
• 常用NoSQL数据库介绍 
• Hbase的架构介绍 
• Hbase的几个值得关注的地方 
• 总结
键值(Key-Value)存储数据库 
相关数据库 
Tokyo Cabinet/Tyrant、Redis、 
Voldemort、Berkeley DB、SSDB 
典型应用 
内容缓存,适合混合工作负载并扩 
展大的数据集 
数据模型一系列键值对 
优势快速查询 
劣势存储的数据缺少结构化
列存储数据库 
相关数据库CCCCaaaassssssssaaaannnnddddrrrraaaa,,,, HHHHBBBBaaaasssseeee,,,, RRRRiiiiaaaakkkk 
典型应用分布式的文件系统 
以列簇式存储,将同一列数据 
数据模型 
存在一起 
优势 
查找速度快,可扩展性强,更 
容易进行分布式扩展 
劣势功能相对局限
文档型数据库 
相关数据库CCCCoooouuuucccchhhhDDDDBBBB、MMMMoooonnnnggggooooDDDDBBBB 
典型应用Web应用 
数据模型一系列键值对
优势数据结构要求不严格 
劣势 
查询性能不高,而且缺乏统一 
的查询语法
图形(Graph)数据库 
相关数据库
NNNNeeeeoooo4444JJJJ、IIIInnnnffffooooGGGGrrrriiiidddd、IIIInnnnffffiiiinnnniiiitttteeee 
GGGGrrrraaaapppphhhh 
典型应用 
社交网络,推荐系统等。专注 
于构建关系图谱 
数据模型图结构
强项利用图结构相关算法。 
弱项 
需要对整个图做计算才能得出 
结果,不容易做分布式的集群 
方案。
分布式系统的CAP理论 
• 一致性(C):在分布式系统中的所有数据备份, 
在同一时刻是否同样的值。 
• 可用性(A):在集群中一部分节点故障后,集群 
整体是否还能响应客户端的读写请求。(可用性 
不仅包括读,,还有写)) 
• 分区容忍性(P):集群中的某些节点在无法联系 
后,集群整体是否还能继续进行服务。 
--HBase社区解释他们选择了CP,而Cassandra选 
择了AP
列存储vs 行存储
三种基本的存储引擎 
--哈希存储引擎 
--B树存储引擎 
-- LSM树(Log-Structured Merge Tree)存储 
引擎
Hbase主要适用场景
• 1 大数据量(100s TB级数据) 且有快速随 
机访问的需求。 
• 2 容量的优雅扩展 
• 3 业务场景简单,不需要关系数据库中很多
特性(例如交叉列、交叉表,事务,连接 
等等) 
• 4 优化方面:合理设计rowkey。因为hbase 
的查询用rowkey是最高效的,也几乎的唯一 
生产环境可行的方式。
总结 
• HBase实现存储, 
--列存储方案 
--LSM(Log Structured Merge-Tree)对数 
据紧缩,,使得数据存储效率不错,,很适合
大数据环境下的读操作,但是如果做删除 
数据(Compaction),由于列存储和LSM固有 
的特点,这时的处理效率不高。
HBase系统架构图
体系结构 
• HMaster 
 Region分配、负载均衡 
 定期扫描-ROOT-、.META. 
 管理Table Schema 
 分发close、flush、compact等管理消息 
 集群管理:容错、扩容、日志分裂 
• Client 
 索引查找 
 数据增删改查操作 
 管理操作 
• ZooKeeper 
• HRegionServer 
 处理Client读、写、扫描请求 
 与HMaster通信,处理管理消息 
 Region的open、close、compaction、split、flush 
 一个维护配置信息、名字空 
间,提供分布式同步、组管 
理的中心化协调服务 
 存储master、regionserver、- 
meta- region的服务器地址
-ROOT-表.META.表 
Prefetching .META. rows in case only 
when useCache is set to true
-ROOT-表.META.表 
Drop Root table
-ROOT-表.META.表
Hbase数据模型
个性化推荐存储表结构 
Row 
key 
Baseinfo 
(CF) 
Modelinfo 
(CF) 
Recommendlist 
(CF) 
用 
户 
唯 
一 
标 
示 
类别 
喜欢 
(colu 
mn) 
最好登 
录时间 
(column) 
长视频 
喜欢标 
签 
(colum 
n) 
短视频 
喜欢标 
签 
(colum 
n) 
用户选 
择标签 
(colum 
n) 
长视频 
推荐列 
表 
(colum 
n) 
短视频 
推荐列 
表 
(colum 
n) 
用户选 
择标签 
推荐列 
表 
(colum 
n) 
头条个 
性化推 
荐列表 
(colum 
n)
实时播放视频历史记录 
rowkey Ugc视频(CF) 版权视频(CF) 
Uid+date 视频ID(column) 视频ID(column)
Hbase数据模型
Hbase 系统架构介绍
• 负责响应用户I/O请求,向HDFS文件系统中读写 
数据,是HBase中最核心的模块。
Hbase 系统架构介绍
• HRegionServer 内部管理了一系列HRegion对象, 
每个HRegion对应了Table中的一个Region, 
HRegion中由多个HStore组成。每个HStore对应 
了Table中的一个Column Family的存储,可以看 
出每个Column Family其实就是一个集中的存储
单元,因此最好将具备共同IO特性的column放 
在一个Column Family中,这样最高效。
数据物理存储 
• 面向列存储
• HBase强一致性 
• HBase无副本机制 
• 由HDFS提供副本机制,保证可靠性
Hbase 系统架构介绍 
• HStore存储是HBase存储的核心了 
-- MemStore 
MemStore是Sorted Memory Buffer,用户写入的数据首先会放入 
MemStore,当MemStore满了以后会Flush成一个StoreFile 
--StoreFiles 
1、Hfile 
2、Compact 
a、合并文件 
b、清除删除、过期、多余版本的数据 
c、提高读写数据的效率
Hbase 系统架构介绍 
• HBase Region split
Hbase 系统架构介绍 
• HLog是一个实现Write Ahead Log的类,在每次用 
户操作写入MemStore的同时,也会写一份数据 
到HLog文件中(HLog文件格式见后续),HLog 
文件定期会滚动出新的,并删除旧的文件(已 
持久化到StoreFile中的数据)
Demo
hbase的读取过程 
LSM-Tree + HTable(region分区) + Cache决定——客户端可以直接定位 
到要查数据所在的HRegion server服务器,然后直接在服务器的一个 
region上查找要匹配的数据,并且这些数据部分是经过cache缓存的
client 
zookeeper 
1、获取meta所在region server地址 
Meta 
表 
Region 
server 
3、连接这个RegionServer, 查到这 
条数据
rowkey info 
regioninfo seqnumDuringOpen server serverstartcode 
Tablename,star 
tkey,timestamp 
,regionname 
STARTKEY、 
ENDKEY, 
region Name 
address
海量数据处理之bloomfilter
hbase的读取过程 
Change the HFile Format 
1、bloomfilter改进查找次数 
2、hbase的三维顺序,按照rowkey,column,ts进行排序,rowkey和column是升序, 
ts是降序 
3、对于一次随机读block的访问顺序是bloomblock 、indexblock 、datablock 
分块+分级索引(RootDataIndex、IntermediateLevel ROOT INDEX 、Leaf index block)
Hbase的几个值得关注的地方 
• Bucket Cache (L2 cache on HBase) 
• Java GC改进(MSLABMemStoreChunkPool) 
• Compaction优化
• PrefixTreeCompression 
• Protocol Buffer作为序列化/反序列化引擎
• ROOT表已经改名为hbase:namespace,META则是 
hbase:meta 
• 缩减Regionserver宕机后的恢复时间
• Deprecate HTablePool in favor of HConnection.getTable(...) 
• HBase的企业级数据库特性(Secondary Index、Join和 
Transaction) 
• ……. https://blogs.apache.org/hbase/
Hbase的cache配置
1、LruBlockCache,默认的BlockCache实 
现,也是目前使用的BlockCache 
2、SlabCache 
--SlabCache使用DirectMemory来存储block 
--SingleSizeCache的设计,导致内存使用率很低
3、bucketcache 
--解决LruBlockCache的缺点及支持面向高性能读的 
大缓存空间.
Hbase的cache配置
海量数据+高效的随机读性能 
–96G、128G内存? 
–直接采用SSD、Fusion-IO做底层存 
储介质?? 
–L2 Cache?- Bucket Cache (0.96) 
https://issues.apache.org/jira/browse 
/HBASE-7404
与LruBlockCache搭配,作为主要的内 
存cache方案使用
作为二级缓存使用,将Block缓存在
高速盘(Fusion-IO)中
Cache block in Bucket Cache 
CacheBlock的时候,将 
Block放在一个RAMMap 
和一个Queue中,然后 
WriterThread异步从 
Queue中remove Block写
入到IOEngine(内存或高 
速盘)中,并将BlockKey 
及其位置、长度等信息 
记录在backingMap
Get block in Bucket Cache 
GetBlock的时候, 
先访问RAMMap, 
然后访问 
backingMap获取 
block的位置及长度, 
从IOEngine读取数 
据
Bucket Organization in Bucket 
Allocator
Bucket Organization in Bucket 
Allocator
Bucket Organization in Bucket 
Allocator
Java GC改进
(MSLABMemStoreChunkPool) 
MemstoreLAB避免申 
请小内存,一次申请 
大内存chunk 
MemStoreChunkPool 
维护chunk 
hbase.hregion.memstore.mslab.enabled 
是否启用MSLAB,默认true 
hbase.hregion.memstore.mslab.chunksize 
Chunk的尺寸,默认2MB 
hbase.hregion.memstore.mslab.max.allocation 
MSLAB中单次分配内存的最大尺寸,默认256K,超过该尺寸 
的内存直接在Heap上分配。
MemStoreChunkPool 
维护没有reference hunk 
(防止chunk内存flush, 
没有reference) 
MemstoreLAB(避免 
申请小内存,一次申请 
大内存chunk ) 
Put back chunk 
Get chunk WHEN EXISTS 
Create one chunk 
when achieve the max size 
Heap
ROOT表更改 
• HBASE-8015: 在0.96中,ROOT表已经改名为hbase:namespace, 
META则是hbase:meta。而且hbase:namespace是存在Zookeeper上的 
这个namespace类似于RDBMS里的database的概念,可以更好的做 
权限管理和安全控制。HBase中table的META信息也是作为一种 
Region 存放在Region Server 上的,那么META 表的Region 
和其他普通Region就会产生明显的资源竞争。为了改善META Region的性能, 
360的HBase中提出了专属MetaServer,在这个Region Server上只存 
放META Region
总结 
• 1)首先说说为什么要有WAL(Write Ahead Log),很简 
单,因为数据是先写到内存中,如果断电,内存中的数 
据会丢失,因此为了保护内存中的数据,需要在磁盘上 
先记录logfile,当内存中的数据flush到磁盘上时,就可 
以抛弃相应的Logfile。 
• 2 )什么是memstore, storefile?很简单,上面说过,LSM 
树就是一堆小树,在内存中的小树即memstore,每次 
flush,内存中的memstore变成磁盘上一个新的storefile。 
• 3)为什么会有compact?很简单,随着小树越来越多, 
读的性能会越来越差,因此需要在适当的时候,对磁盘 
中的小树进行merge,多棵小树变成一颗大树。
Thanks! 
QQAA

Weitere ähnliche Inhalte

Was ist angesagt?

Ceph中国社区9.19 Ceph FS-基于RADOS的高性能分布式文件系统02-袁冬
Ceph中国社区9.19 Ceph FS-基于RADOS的高性能分布式文件系统02-袁冬Ceph中国社区9.19 Ceph FS-基于RADOS的高性能分布式文件系统02-袁冬
Ceph中国社区9.19 Ceph FS-基于RADOS的高性能分布式文件系统02-袁冬Hang Geng
 
Cephfs架构解读和测试分析
Cephfs架构解读和测试分析Cephfs架构解读和测试分析
Cephfs架构解读和测试分析Yang Guanjun
 
Building the Production Ready EB level Storage Product from Ceph - Dongmao Zhang
Building the Production Ready EB level Storage Product from Ceph - Dongmao ZhangBuilding the Production Ready EB level Storage Product from Ceph - Dongmao Zhang
Building the Production Ready EB level Storage Product from Ceph - Dongmao ZhangCeph Community
 
分布式存储的元数据设计
分布式存储的元数据设计分布式存储的元数据设计
分布式存储的元数据设计LI Daobing
 
Memcached vs redis
Memcached vs redisMemcached vs redis
Memcached vs redisqianshi
 
大规模网站架构
大规模网站架构大规模网站架构
大规模网站架构drewz lin
 
Redis 常见使用模式分析
Redis 常见使用模式分析Redis 常见使用模式分析
Redis 常见使用模式分析vincent253
 
NoSQL-MongoDB介紹
NoSQL-MongoDB介紹NoSQL-MongoDB介紹
NoSQL-MongoDB介紹國昭 張
 
大数据时代feed架构 (ArchSummit Beijing 2014)
大数据时代feed架构 (ArchSummit Beijing 2014)大数据时代feed架构 (ArchSummit Beijing 2014)
大数据时代feed架构 (ArchSummit Beijing 2014)Tim Y
 
Hbase运维碎碎念
Hbase运维碎碎念Hbase运维碎碎念
Hbase运维碎碎念haiyuan ning
 
硬件体系架构浅析
硬件体系架构浅析硬件体系架构浅析
硬件体系架构浅析frogd
 
Redis replication dcshi
Redis replication dcshiRedis replication dcshi
Redis replication dcshidcshi
 
百度系统部分布式系统介绍 马如悦 Sacc2010
百度系统部分布式系统介绍 马如悦 Sacc2010百度系统部分布式系统介绍 马如悦 Sacc2010
百度系统部分布式系统介绍 马如悦 Sacc2010Chuanying Du
 
Oracle rac资源管理算法与cache fusion实现浅析
Oracle rac资源管理算法与cache fusion实现浅析Oracle rac资源管理算法与cache fusion实现浅析
Oracle rac资源管理算法与cache fusion实现浅析frogd
 

Was ist angesagt? (20)

Ceph中国社区9.19 Ceph FS-基于RADOS的高性能分布式文件系统02-袁冬
Ceph中国社区9.19 Ceph FS-基于RADOS的高性能分布式文件系统02-袁冬Ceph中国社区9.19 Ceph FS-基于RADOS的高性能分布式文件系统02-袁冬
Ceph中国社区9.19 Ceph FS-基于RADOS的高性能分布式文件系统02-袁冬
 
Cephfs架构解读和测试分析
Cephfs架构解读和测试分析Cephfs架构解读和测试分析
Cephfs架构解读和测试分析
 
Redis介绍
Redis介绍Redis介绍
Redis介绍
 
Building the Production Ready EB level Storage Product from Ceph - Dongmao Zhang
Building the Production Ready EB level Storage Product from Ceph - Dongmao ZhangBuilding the Production Ready EB level Storage Product from Ceph - Dongmao Zhang
Building the Production Ready EB level Storage Product from Ceph - Dongmao Zhang
 
分布式存储的元数据设计
分布式存储的元数据设计分布式存储的元数据设计
分布式存储的元数据设计
 
Memcached vs redis
Memcached vs redisMemcached vs redis
Memcached vs redis
 
大规模网站架构
大规模网站架构大规模网站架构
大规模网站架构
 
Redis 常见使用模式分析
Redis 常见使用模式分析Redis 常见使用模式分析
Redis 常见使用模式分析
 
Ceph perf-tunning
Ceph perf-tunningCeph perf-tunning
Ceph perf-tunning
 
NoSQL-MongoDB介紹
NoSQL-MongoDB介紹NoSQL-MongoDB介紹
NoSQL-MongoDB介紹
 
Ceph monitor-op
Ceph monitor-opCeph monitor-op
Ceph monitor-op
 
大数据时代feed架构 (ArchSummit Beijing 2014)
大数据时代feed架构 (ArchSummit Beijing 2014)大数据时代feed架构 (ArchSummit Beijing 2014)
大数据时代feed架构 (ArchSummit Beijing 2014)
 
Hdfs
HdfsHdfs
Hdfs
 
Hbase运维碎碎念
Hbase运维碎碎念Hbase运维碎碎念
Hbase运维碎碎念
 
Hadoop hive
Hadoop hiveHadoop hive
Hadoop hive
 
硬件体系架构浅析
硬件体系架构浅析硬件体系架构浅析
硬件体系架构浅析
 
Redis replication dcshi
Redis replication dcshiRedis replication dcshi
Redis replication dcshi
 
百度系统部分布式系统介绍 马如悦 Sacc2010
百度系统部分布式系统介绍 马如悦 Sacc2010百度系统部分布式系统介绍 马如悦 Sacc2010
百度系统部分布式系统介绍 马如悦 Sacc2010
 
Oracle rac资源管理算法与cache fusion实现浅析
Oracle rac资源管理算法与cache fusion实现浅析Oracle rac资源管理算法与cache fusion实现浅析
Oracle rac资源管理算法与cache fusion实现浅析
 
Mongo db 特性
Mongo db 特性Mongo db 特性
Mongo db 特性
 

Ähnlich wie Hbase架构简介、实践

浅析分布式存储架构—设计自己的存储- 58同城徐振华
浅析分布式存储架构—设计自己的存储- 58同城徐振华浅析分布式存储架构—设计自己的存储- 58同城徐振华
浅析分布式存储架构—设计自己的存储- 58同城徐振华zhuozhe
 
Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)
Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)
Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)涛 吴
 
Nosql三步曲
Nosql三步曲Nosql三步曲
Nosql三步曲84zhu
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at TaobaoJoshua Zhu
 
Ocean base 千亿级海量数据库-日照
Ocean base 千亿级海量数据库-日照Ocean base 千亿级海量数据库-日照
Ocean base 千亿级海量数据库-日照Shaoning Pan
 
分布式缓存与队列
分布式缓存与队列分布式缓存与队列
分布式缓存与队列XiaoJun Hong
 
Bypat博客出品-服务器运维集群方法总结2
Bypat博客出品-服务器运维集群方法总结2Bypat博客出品-服务器运维集群方法总结2
Bypat博客出品-服务器运维集群方法总结2redhat9
 
诗檀软件 Oracle开发优化基础
诗檀软件 Oracle开发优化基础 诗檀软件 Oracle开发优化基础
诗檀软件 Oracle开发优化基础 maclean liu
 
Buffer pool implementaion inno db vs oracle
Buffer pool implementaion inno db vs oracleBuffer pool implementaion inno db vs oracle
Buffer pool implementaion inno db vs oraclefrogd
 
Bypat博客出品-服务器运维集群方法总结
Bypat博客出品-服务器运维集群方法总结Bypat博客出品-服务器运维集群方法总结
Bypat博客出品-服务器运维集群方法总结redhat9
 
Cassandra简介.ppt
Cassandra简介.pptCassandra简介.ppt
Cassandra简介.pptjames tong
 
20120324 sql server 2012新特性by_rico
20120324 sql server 2012新特性by_rico20120324 sql server 2012新特性by_rico
20120324 sql server 2012新特性by_ricoRico Chen
 
Hbase使用hadoop分析
Hbase使用hadoop分析Hbase使用hadoop分析
Hbase使用hadoop分析baggioss
 
Google LevelDB Study Discuss
Google LevelDB Study DiscussGoogle LevelDB Study Discuss
Google LevelDB Study Discusseverestsun
 
数据库高可用架构
数据库高可用架构数据库高可用架构
数据库高可用架构freezr
 
Linux内存管理
Linux内存管理Linux内存管理
Linux内存管理zijia
 
Linux内存管理
Linux内存管理Linux内存管理
Linux内存管理zijia
 
大型视频网站单点分析与可用性提升-Qcon2011
大型视频网站单点分析与可用性提升-Qcon2011大型视频网站单点分析与可用性提升-Qcon2011
大型视频网站单点分析与可用性提升-Qcon2011Yiwei Ma
 

Ähnlich wie Hbase架构简介、实践 (20)

浅析分布式存储架构—设计自己的存储- 58同城徐振华
浅析分布式存储架构—设计自己的存储- 58同城徐振华浅析分布式存储架构—设计自己的存储- 58同城徐振华
浅析分布式存储架构—设计自己的存储- 58同城徐振华
 
Zh tw introduction_to_h_base
Zh tw introduction_to_h_baseZh tw introduction_to_h_base
Zh tw introduction_to_h_base
 
Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)
Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)
Pegasus: Designing a Distributed Key Value System (Arch summit beijing-2016)
 
内存数据库[1]
内存数据库[1]内存数据库[1]
内存数据库[1]
 
Nosql三步曲
Nosql三步曲Nosql三步曲
Nosql三步曲
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at Taobao
 
Ocean base 千亿级海量数据库-日照
Ocean base 千亿级海量数据库-日照Ocean base 千亿级海量数据库-日照
Ocean base 千亿级海量数据库-日照
 
分布式缓存与队列
分布式缓存与队列分布式缓存与队列
分布式缓存与队列
 
Bypat博客出品-服务器运维集群方法总结2
Bypat博客出品-服务器运维集群方法总结2Bypat博客出品-服务器运维集群方法总结2
Bypat博客出品-服务器运维集群方法总结2
 
诗檀软件 Oracle开发优化基础
诗檀软件 Oracle开发优化基础 诗檀软件 Oracle开发优化基础
诗檀软件 Oracle开发优化基础
 
Buffer pool implementaion inno db vs oracle
Buffer pool implementaion inno db vs oracleBuffer pool implementaion inno db vs oracle
Buffer pool implementaion inno db vs oracle
 
Bypat博客出品-服务器运维集群方法总结
Bypat博客出品-服务器运维集群方法总结Bypat博客出品-服务器运维集群方法总结
Bypat博客出品-服务器运维集群方法总结
 
Cassandra简介.ppt
Cassandra简介.pptCassandra简介.ppt
Cassandra简介.ppt
 
20120324 sql server 2012新特性by_rico
20120324 sql server 2012新特性by_rico20120324 sql server 2012新特性by_rico
20120324 sql server 2012新特性by_rico
 
Hbase使用hadoop分析
Hbase使用hadoop分析Hbase使用hadoop分析
Hbase使用hadoop分析
 
Google LevelDB Study Discuss
Google LevelDB Study DiscussGoogle LevelDB Study Discuss
Google LevelDB Study Discuss
 
数据库高可用架构
数据库高可用架构数据库高可用架构
数据库高可用架构
 
Linux内存管理
Linux内存管理Linux内存管理
Linux内存管理
 
Linux内存管理
Linux内存管理Linux内存管理
Linux内存管理
 
大型视频网站单点分析与可用性提升-Qcon2011
大型视频网站单点分析与可用性提升-Qcon2011大型视频网站单点分析与可用性提升-Qcon2011
大型视频网站单点分析与可用性提升-Qcon2011
 

Hbase架构简介、实践