`
king_c
  • 浏览: 222762 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

HBase关键算法 / 流程

 
阅读更多

关键算法 / 流程

region定位

系统如何找到某个row key (或者某个 row key range)所在的region

bigtable 使用三层类似B+树的结构来保存region位置。

第一层是保存zookeeper里面的文件,它持有root region的位置。

第二层root region是.META.表的第一个region其中保存了.META.z表其它region的位置。通过root region,我们就可以访问.META.表的数据。

.META.是第三层,它是一个特殊的表,保存了hbase中所有数据表的region 位置信息。

说明:

1 root region永远不会被split,保证了最需要三次跳转,就能定位到任意region 。

2.META.表每行保存一个region的位置信息,row key 采用表名+表的最后一样编码而成。

3 为了加快访问,.META.表的全部region都保存在内存中。

假设,.META.表的一行在内存中大约占用1KB。并且每个region限制为128MB。

那么上面的三层结构可以保存的region数目为:

(128MB/1KB) * (128MB/1KB) = = 2(34)个region

4 client会将查询过的位置信息保存缓存起来,缓存不会主动失效,因此如果client上的缓存全部失效,则需要进行6次网络来回,才能定位到正确的region(其中三次用来发现缓存失效,另外三次用来获取位置信息)。

 

读写过程

上文提到,hbase使用MemStore和StoreFile存储对表的更新。

数据在更新时首先写入Log(WAL log)和内存(MemStore)中,MemStore中的数据是排序的,当MemStore累计到一定阈值时,就会创建一个新的MemStore,并且将老的MemStore添加到flush队列,由单独的线程flush到磁盘上,成为一个StoreFile。于此同时,系统会在zookeeper中记录一个redo point,表示这个时刻之前的变更已经持久化了。(minor compact)

当系统出现意外时,可能导致内存(MemStore)中的数据丢失,此时使用Log(WAL log)来恢复checkpoint之后的数据。

前面提到过StoreFile是只读的,一旦创建后就不可以再修改。因此Hbase的更新其实是不断追加的操作。当一个Store中的StoreFile达到一定的阈值后,就会进行一次合并(major compact),将对同一个key的修改合并到一起,形成一个大的StoreFile,当StoreFile的大小达到一定阈值后,又会对 StoreFile进行split,等分为两个StoreFile。

由于对表的更新是不断追加的,处理读请求时,需要访问Store中全部的 StoreFile和MemStore,将他们的按照row key进行合并,由于StoreFile和MemStore都是经过排序的,并且StoreFile带有内存中索引,合并的过程还是比较快。

写请求处理过程

1 client向region server提交写请求

2 region server找到目标region

3 region检查数据是否与schema一致

4 如果客户端没有指定版本,则获取当前系统时间作为数据版本

5 将更新写入WAL log

6 将更新写入Memstore

7 判断Memstore的是否需要flush为Store文件。

 

region分配

任何时刻,一个region只能分配给一个region server。master记录了当前有哪些可用的region server。以及当前哪些region分配给了哪些region server,哪些region还没有分配。当存在未分配的region,并且有一个region server上有可用空间时,master就给这个region server发送一个装载请求,把region分配给这个region server。region server得到请求后,就开始对此region提供服务。

 

region server上线

master使用zookeeper来跟踪region server状态。当某个region server启动时,会首先在zookeeper上的server目录下建立代表自己的文件,并获得该文件的独占锁。由于master订阅了server 目录上的变更消息,当server目录下的文件出现新增或删除操作时,master可以得到来自zookeeper的实时通知。因此一旦region server上线,master能马上得到消息。

 

region server下线

当region server下线时,它和zookeeper的会话断开,zookeeper而自动释放代表这台server的文件上的独占锁。而master不断轮询 server目录下文件的锁状态。如果master发现某个region server丢失了它自己的独占锁,(或者master连续几次和region server通信都无法成功),master就是尝试去获取代表这个region server的读写锁,一旦获取成功,就可以确定:

1 region server和zookeeper之间的网络断开了。

2 region server挂了。

的其中一种情况发生了,无论哪种情况,region server都无法继续为它的region提供服务了,此时master会删除server目录下代表这台region server的文件,并将这台region server的region分配给其它还活着的同志。

如果网络短暂出现问题导致region server丢失了它的锁,那么region server重新连接到zookeeper之后,只要代表它的文件还在,它就会不断尝试获取这个文件上的锁,一旦获取到了,就可以继续提供服务。

 

master上线

master启动进行以下步骤:

1 从zookeeper上获取唯一一个代码master的锁,用来阻止其它master成为master。

2 扫描zookeeper上的server目录,获得当前可用的region server列表。

3 和2中的每个region server通信,获得当前已分配的region和region server的对应关系。

4 扫描.META.region的集合,计算得到当前还未分配的region,将他们放入待分配region列表。

 

master下线

由于master只维护表和region的元数据,而不参与表数据IO的过程,master下线仅导致所有元数据的修改被冻结(无法创建删除表,无法修改表的schema,无法进行region的负载均衡,无法处理region 上下线,无法进行region的合并,唯一例外的是region的split可以正常进行,因为只有region server参与),表的数据读写还可以正常进行。因此master下线短时间内对整个hbase集群没有影响。从上线过程可以看到,master保存的信息全是可以冗余信息(都可以从系统其它地方收集到或者计算出来),因此,一般hbase集群中总是有一个master在提供服务,还有一个以上的’master’在等待时机抢占它的位置。

 

分享到:
评论

相关推荐

    hbase培训资料

    hbase 培训 hadoop 逻辑视图 物理存储 系统架构 关键算法/流程 访问接口 相关资料 结束语

    基于hbase + spark 实现常用推荐算法(主要用于精准广告投放和推荐系统).zip

    在现代大数据处理领域,HBase和Spark是两个重要的工具,它们在实现推荐算法,特别是针对精准广告投放和推荐系统方面发挥了关键作用。本项目结合了这两个技术,旨在提供一种高效、可扩展的解决方案。 首先,HBase是...

    IT十八掌_HBase阶段学习笔记(课堂笔记与原理图解)

    IT十八掌大数据第三期配套课堂笔记! 1 、HBase的特点 2 、HBase访问接口 3 、HBase存储结构与格式 4 、HBase设计 5 、关键算法和流程 6 、HBase安装 7、HBase的Shell操作 8、HBase客户端

    HBase基本数据操作详解.docx

    - `HTableDescriptor`和`HColumnDescriptor`是定义表和列族的主要工具,它们允许设置各种属性,如列族的压缩算法、最大版本数等。 - `Durability`参数用于控制数据写入的持久化策略,例如`SYNC_WAL`表示同步地将数据...

    电影推荐网站(基于hadoop生态的大数据项目,使用hbase和MySQL数据库,利用协同过滤算法给出用户电影推荐).zip

    电影推荐网站是一个基于Hadoop生态系统的大数据项目,它利用了HBase和MySQL数据库,并通过协同过滤算法为用户提供个性化的电影推荐。在这个项目中,我们主要关注以下几个关键知识点: 1. **Hadoop生态**:Hadoop是...

    java 大数据 spark flink redis hive hbase kafka 面试题 数据结构 算法 设计模式.zip

    面试中会讨论HBase的模型(行、列族、列、版本)、RegionServer、Zookeeper的作用、读写流程以及HBase与Hadoop的集成。 8. **Kafka**:Kafka是一个高吞吐量的分布式消息队列,常用于实时数据管道和流处理。面试时...

    7.2-列存储数据库-3.pptx

    "列存储数据库-HBASE关键算法和应用" HBASE是基于列存储的NoSQL数据库,它的关键算法和应用场景在这里进行详细介绍。 区域(Region)的定位 在HBASE中,区域(Region)是一个关键概念。Region是HBASE中的基本存储...

    数据库列存储数据库-2.pptx

    【数据库列存储数据库-2.pptx】是一个关于HBase的深入讲解,主要涵盖了HBase的关键算法、HBase的应用API以及其应用场景。HBase是一种基于列存储的分布式数据库,广泛应用于大数据存储和处理。 1. **HBASE的关键算法...

    crunch-hbase-0.10.0.zip

    在crunch-hbase-0.10.0中,开发者可以利用Crunch的API来创建复杂的MapReduce流程,同时无缝地与HBase交互。例如,可以方便地读取HBase表,进行数据清洗、转换,然后将结果写回HBase或其他存储系统。这个版本可能引入...

    基于Hadoop_hbase的Distinct实现.zip

    HBase的架构包括Region Server、Master Server、Zookeeper等关键组件。 3. **Hadoop中的Distinct计算**:在Hadoop环境中,可以使用MapReduce来计算数据集的唯一值。通常,Map阶段会拆分数据,Reduce阶段则处理并...

    HBaseInMemoryCompaction.pdf

    了解HBase中的In-Memory Compaction,首先需要理解几个关键概念: 1. LSM树(Log-Structured-Merge Tree):一种用于存储系统中用来提升写性能的数据结构。LSM树将所有的修改操作保存在内存中,之后批量地顺序写入...

    基于Django LayUI HBase的文献数据挖掘系统.zip

    在系统实现过程中,Django与HBase的集成是关键环节。通常,开发者会通过自定义Django的数据库引擎或者使用第三方库如`django-hbase`来实现两者之间的通信。数据挖掘部分可能涉及到NLP(自然语言处理)技术,如TF-IDF...

    基于flume+kafka_spark streaming+hbase的流式处理系统设计与实现.zip

    本项目“基于Spark开发的完整项目算法源码”旨在提供一种高效、实时的流式处理解决方案,结合了Apache Flume、Apache Kafka、Spark Streaming以及HBase等多个开源组件,构建了一个强大的数据处理管道。以下是这个...

    基于spark streaming和kafka,hbase的日志统计分析系统.zip

    总的来说,这个基于Spark Streaming、Kafka和HBase的日志统计分析系统是学习实时大数据处理的一个优秀实例,涵盖了从数据采集、实时处理到存储的关键环节,对于提升大数据技术的理论知识和实践经验有着极大的价值。

    大数据日知录_架构与算法

    在实际应用部分,书中可能列举了大数据在电商、社交媒体、金融、医疗等行业的成功案例,解析如何通过大数据架构和算法优化业务流程、提高运营效率、驱动创新。比如,通过用户行为分析提升个性化推荐,或者利用大数据...

    大数据环境下基于决策树算法的人才招聘系统优化研究.pdf

    通过对简历库中的关键信息提取,构建人才属性测试集,利用C4.5算法建立的决策树可以进行简历筛选,帮助人力资源部门(HR)完成招聘流程,从而降低时间成本、节省招聘支出并提升工作效率。 具体到招聘系统的设计和...

    算法题.zip

    【算法题.zip】这个压缩包文件集合了多个与IT领域高度相关的资料,主要涵盖了Python面试、大数据面试以及算法笔试题目,对于准备相关职位面试或提升技术能力的人来说极具价值。以下是这些资源所涉及的重要知识点的...

Global site tag (gtag.js) - Google Analytics