广告
返回顶部
首页 > 资讯 > 数据库 >Hbase组件间交互
  • 528
分享到

Hbase组件间交互

2024-04-02 19:04:59 528人浏览 独家记忆
摘要

Hbase实现    HBase由一个Master节点负责协调管理一个或多个RegionServer从属机.Master负责启动,把区域分配给注册的RegionServer,恢

Hbase实现
    HBase由一个Master节点负责协调管理一个或多个RegionServer从属机.Master负责启动,把区域分配给注册的RegionServer,恢复RegionServer的故障. Master负载很轻. RegionServer负责零个或多个区域的管理以及响应客户端的读写请求, RegionServer还负责区域的划分,并通知Master有了新的子区域Hbase依赖于ZooKeeper.如果区域的分配过程中有服务器崩溃,就通过Zookeeper来协调,分配,在Zookeeper分配事务状态有助于在恢复时可以从崩溃遗留的状态开始继续分配.在启动一个客户端到集群上的连接时,客户端必须至少拿到集群所传递的Zookeeper整体的位置.这样,客户端才能访问Zookeeper的层次,了解集群的属性,如服务器的位置.
运行中Hbase
    Hbase中保留着-ROOT-和.META.的特殊目录,它们维护着当前集群上所有区域的列表,状态,位置.ROOT表维护着Meta表的信息,Meta表维护着用户表的信息, Meta表中的项使用区域名作为主键,区域名由所属的表名,区域的起始行,创建的时间戳进行哈希后的结果组成.区域变化时,即分裂,禁用/启用.删除,为负载均衡重新部署机器或由于Regionserver崩溃而重新部署区域时,目录表都会相应进行更新,这样,集群上所以区域的信息都能保持是最新的.
客户端的每一个行操作都要访问三次远程节点:
    1.从Zookeeper获取Master的位置
    2.从Master获取.Meta.表的信息
    3.根据.Meta.表的信息,获取region位置信息

    为了减少访问远程节点,Hbase客户端会缓存它们遍历ROOT表时获取的信息和Meta表位置以及用户空间的区域的开始行和结束行,这样不用访问Meta表也能得知区域存放的位置.当客户端碰到错误时会再去查看Meta获取区域的新位置,如果.Meta也移动了,就去查询ROOT表 


Client

1 包含访问hbase的接口,client维护着一些cache来加快对hbase的访问,比如regione的位置信息。
Zookeeper
1 保证任何时候,集群中只有一个master
2 存贮所有Region的寻址入口。
3 实时监控Region Server的状态,将Region server的上线和下线信息实时通知给Master
4 存储Hbase的schema,包括有哪些table,每个table有哪些column family
Master
1 为Region server分配region
2 负责region server的负载均衡
3 发现失效的region server并重新分配其上的region
4 GFS上的垃圾文件回收
5 处理schema更新请求
Region Server
1 Region server维护Master分配给它的region,处理对这些region的IO请求
2 Region server负责切分在运行过程中变得过大的region
可以看到,client访问hbase上数据的过程并不需要master参与(寻址访问zookeeper和region server,数据读写访问regione server),master仅仅维护者table和region的元数据信息,负载很低


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’在等待时机抢占它的位置。

您可能感兴趣的文档:

--结束END--

本文标题: Hbase组件间交互

本文链接: https://www.lsjlt.com/news/35246.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Hbase组件间交互
    Hbase实现    Hbase由一个Master节点负责协调管理一个或多个RegionServer从属机.Master负责启动,把区域分配给注册的RegionServer,恢...
    99+
    2022-10-18
  • Android组件之间交互核心Intent用法分析
    本文实例讲述了Android组件之间交互核心Intent用法。分享给大家供大家参考,具体如下: 从一个Activity启动到另一个Activity可以使用startActivi...
    99+
    2022-06-06
    intent Android
  • Angular组件间进行交互的方法有哪些
    本篇内容介绍了“Angular组件间进行交互的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、...
    99+
    2022-10-19
  • VueJS组件之间如何通过props交互及验证
    小编给大家分享一下VueJS组件之间如何通过props交互及验证,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!props 是父组...
    99+
    2022-10-19
  • vuejs中怎么实现父子组件间数据交互
    今天就跟大家聊聊有关vuejs中怎么实现父子组件间数据交互,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。父子组件之间的数据交互遵循:props do...
    99+
    2022-10-19
  • Angular2如何实现组件交互
    这篇文章主要为大家展示了“Angular2如何实现组件交互”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Angular2如何实现组件交互”这篇文章吧。前言在An...
    99+
    2022-10-19
  • HBase 与Hive数据交互整合过程详解
    Hive和Hbase整合理论1、为什么hive要和hbase整合2、整合的优缺点优点:(1).Hive方便地提供了Hive QL的接口来简化MapReduce的使用,  而HBase提供了低延迟的...
    99+
    2022-10-18
  • vue实现父子组件间数据交互的方式是什么
    本文小编为大家详细介绍“vue实现父子组件间数据交互的方式是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue实现父子组件间数据交互的方式是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。父子组件之间的...
    99+
    2023-07-04
  • Angular组件的交互方式有哪些
    这篇文章主要介绍Angular组件的交互方式有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Angular 组件交互组件交互: 组件通讯,让两个或多个组件之间共享信息。使用场景: 当某个功能在多个组件中被使用到时...
    99+
    2023-06-14
  • Angular2中组件交互的示例分析
    这篇文章主要为大家展示了“Angular2中组件交互的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Angular2中组件交互的示例分析”这篇文章吧。1...
    99+
    2022-10-19
  • Angular中组件交互的示例分析
    这篇文章将为大家详细讲解有关Angular中组件交互的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Angular 组件交互组件交互: 组件通讯,让两个或多个组件之间共享信息。使用场景: 当某个功...
    99+
    2023-06-14
  • echarts交互组件与数据的视觉映射
    交互组件 ECharts 提供了很多交互组件:例组件 legend、标题组件 title、视觉映射组件 visualMap、数据区域缩放组件 dataZoom、时间线组件 timel...
    99+
    2022-11-13
  • CDH5 下HBase组件无法启动
    研发环境下搭建了一套基于CDH5的大数据平台。在重启服务器后发现HBase组件启动异常,如图HBase Master 运行状况不良 RegionServer运行状况不良 所有的RegionServer角色全...
    99+
    2022-10-18
  • vue3 父子组件间相互传值方式
    目录vue3父子组件相互传值父向子传值子组件向父组件传值vue3父子组件传值的注意事项解决办法:两种vue3父子组件相互传值 父向子传值 父 <pie-chart :pieDa...
    99+
    2022-11-13
  • React 实现爷孙组件间相互通信
    目录前言爷孙组件间通信前言 最近在学习React,给大家总结下跨组件通信中,爷孙组件之间怎么相互通信。简单明了上代码直接一把梭,不多解释。 爷孙组件间通信 案例如下: 代码: /...
    99+
    2022-11-13
    React 组件间相互通信 React 组件通信
  • Angular中父子组件间如何相互传参
    这篇文章主要介绍Angular中父子组件间如何相互传参,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一 :父组件获取子组件的数据和方法也就是说 子组件给父组件传数据和方法通过ViewChild演示例子:父组件:new...
    99+
    2023-06-15
  • 如何实现WinForm窗体间交互
    这篇文章主要介绍如何实现WinForm窗体间交互,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在窗体间传递数据的方法比较多:1,在子窗体中自定义一个构造函数,参数类型是主窗体,当要显示子窗体的时候,就用这个构造函数来...
    99+
    2023-06-17
  • 探索Go和Django之间的接口文件交互方式?
    Go语言和Django框架都是目前非常流行的开发工具,它们都有各自的优点和适用场景。在实际开发中,我们可能会遇到Go和Django之间需要进行接口文件交互的情况,那么有哪些方式可以实现呢? 一、使用HTTP协议进行交互 HTTP协议是常用的...
    99+
    2023-08-25
    django 接口 文件
  • Apache和Java文件之间的实时交互,你了解吗?
    Apache和Java是两个广泛使用的技术,它们在不同的领域发挥着重要作用。在实际应用中,我们经常需要将这两个技术进行整合,以实现更强大的功能。本文将介绍如何实现Apache和Java文件之间的实时交互,并演示一些实用的代码。 一、Apa...
    99+
    2023-10-22
    文件 实时 apache
  • vue3实战-子组件之间相互传值问题
    目录vue3子组件之间相互传值vue不同组件之间相互传值总结vue3子组件之间相互传值 1、引用第三方库mitt npm install mitt 2、在项目src文件夹下创建uti...
    99+
    2023-03-19
    vue3组件传值 子组件之间相互传值 vue3子组件相互传值
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作