
Hbase
HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于B
souy_c
这个作者很懒,什么都没留下…
展开
-
hbase--多版本控制mvcc
数据库为了保证一致性,在执行读写操作时往往会对数据做一些锁操作,比如两个client同时修改一条数据,我们无法确定最终的数据到底是哪一个client执行的结果,所以需要通过加锁来保证数据的一致性。但是锁操作的代价是比较大的,往往需要对加锁操作进行优化,主流的数据库MySQL,PG等都采用MVCC(多版本并发控制)来尽量避免使用不必要的锁以提高性能。HBase也是使用MVCC来进行并发控制。sql标准定义了4种隔离级别:1、READ UNCOMMITED(未提交读) 在RERAD UNCOM原创 2020-10-09 19:43:28 · 860 阅读 · 0 评论 -
hbase---跳跃表(skiplist)
跳跃表(SkipList)是一种能高效实现插入、删除、查找的内存数据结构,这些操作的期望复杂度都是O(logN)。与红黑树以及其他的二分查找树相比,跳跃表的优势在于实现简单,而且在并发场景下加锁粒度更小,从而可以实现更高的并发性。正因为这些优点,跳跃表广泛使用于KV数据库中,诸如Redis、LevelDB、HBase都把跳跃表作为一种维护有序数据集合的基础数据结构。众所周知,链表这种数据结构的查询复杂度为O(N),这里N是链表中元素的个数。在已经找到要删除元素的情况下,再执行链表的删除操作其实非常高效,原创 2020-09-19 14:29:52 · 1425 阅读 · 1 评论 -
布隆过滤器原理及实现
如何高效判断元素w是否存在于集合A之中?首先想到的答案是,把集合A中的元素一个个放到哈希表中,然后在哈希表中查一下w即可。这样确实可以解决小数据量场景下元素存在性判定,但如果A中元素数量巨大,甚至数据量远远超过机器内存空间,该如何解决问题呢?实现一个基于磁盘和内存的哈希索引当然可以解决这个问题。而另一种低成本的方式就是借助布隆过滤器(Bloom Filter)来实现。布隆过滤器由一个长度为N的01数组array组成。首先将数组array每个元素初始设为0。对集合A中的每个元素w,做K次哈希,第i原创 2020-09-19 14:25:19 · 268 阅读 · 0 评论 -
hbase-----memstore flush 流程代码分析
flush的整体流程分三个阶段 HBase采用了类似于两阶段提交的方式,将整个flush过程分为三个阶段。1)prepare阶段:遍历当前Region中的所有MemStore,将MemStore中当前数据集CellSkipListSet(内部实现采用ConcurrentSkipListMap)做一个快照snapshot,然后再新建一个CellSkipListSet接收新的数据写入。prepare阶段需要添加updateLock对写请求阻塞,结束之后会释放该锁。因为此阶段没有任何费时操作,因此持锁时原创 2020-09-19 14:20:05 · 781 阅读 · 0 评论 -
hbase----hlog流程代码分析
HBase中系统故障恢复以及主从复制都基于HLog实现。默认情况下,所有写入操作(写入、更新以及删除)的数据都先以追加形式写入HLog,再写入MemStore。大多数情况下,HLog并不会被读取,但如果RegionServer在某些异常情况下发生宕机,此时已经写入MemStore中但尚未flush到磁盘的数据就会丢失,需要回放HLog补救丢失的数据。此外,HBase主从复制需要主集群将HLog日志发送给从集群,从集群在本地执行回放操作,完成集群之间的数据复制。1、HLog文件结构HLog文件的基本结原创 2020-09-19 14:01:40 · 767 阅读 · 0 评论 -
Hbase----负载均衡
将从HBase作为分布式系统的视角介绍HBase负载均衡的实现机制。负载均衡是分布式集群设计的一个重要功能,只有实现了负载均衡,集群的可扩展性才能得到有效保证。数据库集群负载均衡的实现依赖于数据库的数据分片设计,可以在一定程度上认为数据分片就是数据读写负载,那么负载均衡功能就是数据分片在集群中均衡的实现。HBase中数据分片的概念是Region。本文将介绍HBase系统中Region迁移、合并、分裂等基本操作原理,基于这些知识介绍HBase系统负载均衡的实现机制。1 Region迁移作为一个分布原创 2020-09-13 15:06:24 · 1938 阅读 · 0 评论 -
Hbase---Compaction
数据写入、读取流程使用了LSM树体系架构,HBase中的用户数据在LSM树体系架构中最终会形成一个一个小的HFile文件。我们知道,HFile小文件如果数量太多会导致读取低效。为了提高读取效率,LSM树体系架构设计了一个非常重要的模块——Compaction。Compaction核心功能是将小文件合并成大文件,提升读取效率。一般基于LSM树体系架构的系统都会设计Compaction,比如LevelDB、RocksDB以及Cassandra等,都可以看到Compaction的身影。我们首先介绍Compac原创 2020-09-13 14:24:51 · 602 阅读 · 1 评论 -
Hbase----读写流程分析
RegionServer中的核心组件主要是为HBase数据读写而设计。本文将会把这些核心组件串联起来进行介绍。首先介绍数据如何写入MemStore并flush形成HFile文件,然后介绍HBase是如何从HFile、MemStore中检索出待查的数据。读写流程是HBase内核最重要、最复杂的内容,这里只介绍核心主干流程。1、HBase写入流程HBase采用LSM树架构,天生适用于写多读少的应用场景。在真实生产线环境中,也正是因为HBase集群出色的写入能力,才能支持当下很多数据激增的业务。需要说明的原创 2020-09-12 23:36:58 · 460 阅读 · 0 评论 -
Hbase------regionServer
RegionServer是HBase系统中最核心的组件,主要负责用户数据写入、读取等基础操作。RegionServer组件实际上是一个综合体系,包含多个各司其职的核心模块:HLog、MemStore、HFile以及BlockCache。先对RegionServer进行分解,并对其中的核心模块进行深入介绍。需要注意的是,这里的介绍仅限于分析其核心作用、内部结构等,而对其在整个HBase的读写流程中所起的作用并不展开讨论,后面再介绍HBase的写入读取流程。1 RegionServer内部结构Re.原创 2020-09-06 15:56:05 · 1340 阅读 · 0 评论 -
Hbase(二)Client客户端
对于使用HBase的业务方来说,从HBase客户端到HBase服务端,再到HDFS客户端,最后到HDFS服务端,这是一整条路径,其中任何一个环节出现问题,都会影响业务的可用性并造成延迟。因此,HBase的业务方需要对HBase客户端有较好地理解,以便优化服务体验。而事实上,由于HBase本身功能的复杂性以及Region定位功能设计在客户端上,导致HBase客户端并不足够轻量级。1、 HBase客户端实现HBase提供了面向Java、C/C++、Python等多种语言的客户端。由于HBase本身是Ja原创 2020-09-06 15:21:40 · 3427 阅读 · 0 评论 -
Hbase(一)框架介绍
2006年,Google发布了第三篇重要论文中的《BigTable:A Distributed Storage System for Structured Data》,用于解决Google内部海量结构化数据的存储以及高效读写问题。与前两篇论文相比,这篇论文更难理解一些。这是因为严格意义上来讲,BigTable属于分布式数据库领域,需要具备一定的数据库基础,而且论文中提到的数据模型(多维稀疏排序映射模型)对于习惯了关系型数据库的工程师来说确实不易理解。但从系统架构来看,BigTable还是有很多GFS的影子,原创 2020-09-06 15:07:04 · 536 阅读 · 0 评论