zk在Hbase中的作用

我们知道Hbase集群中主要组件有Hmaster,RegionServer 和 Zookeeper。Hbase强依赖于zk。
在HBase中,ZooKeeper在 Masters 和 RegionServers 之间协调、通信和共享状态。HBase 的设计策略是仅将 ZooKeeper 用于瞬态数据(即用于协调和状态通信)。

因此,如果HBase的ZooKeeper数据被删除,只会影响临时操作——数据可以继续写入/读取 HBase。

Zookeeper集群在Hbase集群中主要作用有如下几个:

[zk: localhost:2181(CONNECTED) 1] ls /hbase[meta-region-server, rs, splitWAL, backup-masters, table-lock, flush-table-proc, master-maintenance, online-snapshot, switch,
master, running, draining, namespace, rsgroup, hbaseid, table]

(1)维护管理了Hbase相关元数据信息

ZK中meta-region-server节点维护hbase的meta表所在的节点信息。

Hbase集群中会维护着一个meta表,这个表存储着Hbase集群所有region的相关信息,包括region所在RegionServer节点,region的rowkey范围,以及region所在表名,列值等信息。

注意:
(1)这个bhase:meta表其实就是一个表的形式存储在hbase中的,只是这个表只有一个region,不切分;

(2)一般这个表region不大,比如一个集群几十万个region的hbase,其meta表也只有几百兆的大小。

这个hbase:meta表或者说这个region也会存储在hbase节点上,具体存储在哪个节点上我们需要维护一下,这件事就是ZK干的。(因为是region就可能因为RegionServer的挂掉,负载均衡等移动位置。Hmaster在启动时会将hbase:meta表加载到ZK集群)。
所以用户CRUD表时需要先去ZK上找到这个hbase:meta元数据表存在哪个节点上,然后在去跟这个节点通信,获取对应的元数据信息。

向Hbase中写数据流程如下:

1、Client先访问zookeeper,获取hbase:meta表位于哪个Region Server。2、访问对应的Region Server,获取hbase:meta表,根据读请求的namespace:table/rowkey,查询出目标数据位于哪个Region Server中的哪个Region中。并将该table的region信息以及meta表的位置信息缓存在客户端的meta cache,方便下次访问。3、与目标Region Server进行通讯;4、将数据顺序写入(追加)到WAL;5、将数据写入对应的MemStore,数据会在MemStore进行排序;6、向客户端发送ack;7、等达到MemStore的刷写时机后,将数据刷写到HFile。

从Hbase中读取数据流程如下:

1、Client先访问zookeeper,获取hbase:meta表位于哪个Region Server。2、访问对应的Region Server,获取hbase:meta表,根据读请求的namespace:table/rowkey,查询出目标数据位于哪个Region Server中的哪个Region中。并将该table的region信息以及meta表的位置信息缓存在客户端的meta cache,方便下次访问。3、与目标Region Server进行通讯;4、分别在Block Cache(读缓存),MemStore和Store File(HFile)中查询目标数据,并将查到的所有数据进行合并。5、将查询到的数据块(Block,HFile数据存储单元,默认大小为64KB)缓存到Block Cache。6、将合并后的最终结果返回给客户端。

我们在zk上get /hbase/meta-region-server,看下,会发现habse:meta表存储在一个节点上。

(2)实现Hmaster节点的高可用管理,HA

[zk: localhost:2181(CONNECTED) 10] ls /hbase/backup-masters

记录集群中备份Master的节点信息,当Master挂了后故障转移使用的,比如主master挂了,zookeeper就会通过选举机制,从备master中选举出来一个当主master角色。

(3)对集群所有RegionServer状态监控,宕机后会通知Hmaster;每个RS启动时都会在ZK上注册,然后master会去监控这个znode

[zk: localhost:2181(CONNECTED) 7] ls /hbase/rs

rs就保存了hbase集群中的所有存活RegionServer的节点,RS每个节点在启动时会去该/hbase/rs目录下注册,注册一个属于自己的临时节点。如果节点超时,就会被清理,Hmaster也会去监听状态,这样RS下线就会知道,好将对应的region转移走。

(4)分布式一致锁的提供,保证数据写入的事务性,表的删除,新建,更新需要维护全局锁

[zk: localhost:2181(CONNECTED) 12] get  /hbase/table-lock

Zookeeper在分布式系统中的一大核心作用就是提供了分布式锁,保证每次操作的事务性。

我们都知道Hbase中表的存储是分布式存储的,一张表分多个region存储在不同的RegionServer上,那么如果我们通过多个客户端同时操作一个表,如何在分布式的情况下保证表数据的准确性呢?所以客户端每次在对表的DDL之前都需要先获取表的全局锁,防止多个操作互相冲突。最终实现单次操作的原子性,要么都成功,要么都失败,进而保证分布式数据的准确性。而这个分布式全局锁的提供者就是zookeeper。

(5)其他

1、 flush-table-proc

这个很重要,存放了Hbase集群中所有表信息。

[zk: localhost:2181(CONNECTED) 18] ls /hbase/table

2、namespace

namespace类似于mysql中的数据库概念,在hbase中主要区分多租户时做表空间的逻辑隔离;

[zk: localhost:2181(CONNECTED) 26] ls /hbase/namespace

3、 draining/hbaseid

draining用于通过创建具有serverName,port,startCode形式的子znode,就是/habse/rs下的子节点信息

这使您可以停用多个 RegionServers,而不会存在将区域临时移动到稍后将停用的 RegionServer 的风险。

hbaseid其实就hbase集群的唯一标识符。因为我们可以将一个zk集群共享,供多个hbase集群复用,所以要唯一标识一个集群。

zookeeper在Hbase中的作用相关推荐

  1. 什么是Zookeeper,Zookeeper的作用是什么,在Hadoop及hbase中具体作用是什么

    原文链接 什么是Zookeeper,Zookeeper的作用是什么,它与NameNode及HMaster如何协作?在没有接触Zookeeper的同学,或许会有这些疑问.这里给大家总结一下. 一.什么是 ...

  2. Zookeeper在Dubbo中的作用及Zk集群的选举原理

    强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan Zk在Dubbo中的作用 zk在dubbo中是服务注册与发现的注册中心,dubbo的调用过程是c ...

  3. ZooKeeper在分布式应用中的作用

    作者:陈叶皓(携程邮轮研发部软件架构师) 是不是要在标题的"作用"之前加上"重要"两个字,我犹豫了一下,zookeeper提供的功能是如此的重要,以至于如果你在 ...

  4. 转载-zookeeper在kafka中的作用

    2019独角兽企业重金招聘Python工程师标准>>> 1)Broker注册 Broker在zookeeper中保存为一个临时节点,节点的路径是/brokers/ids/[broke ...

  5. Zookeeper在Kafka中的作用

    文章目录 1. Broker注册 2. Topic注册 3. __consumer_offsets偏移量 4. 其他信息 5. Broker Controller选举 6. 负载均衡 6.1 生产者负 ...

  6. zookeeper在Dubbo中的作用

    为什么80%的码农都做不了架构师?>>>    流程: 1.服务提供者启动时向/dubbo/com.foo.BarService/providers目录下写入URL 2.服务消费者启 ...

  7. 大数据技术之kafka (第 3 章 Kafka 架构深入) Zookeeper 在 Kafka 中的作用

    Kafka 集群中有一个 broker 会被选举为 Controller,负责管理集群 broker 的上下线,所有 topic 的分区副本分配和 leader 选举等工作. Controller 的 ...

  8. ZooKeeper 原理及其在 Hadoop 和 HBase 中的应用

    ZooKeeper 原理及其在 Hadoop 和 HBase 中的应用 - 文章 - 伯乐在线 /* # The number of milliseconds of each tick tickTim ...

  9. HBase中Bloomfilter类型的设置及使用的理解

    1.Bloomfilter的原理?   可参考  http://hi.baidu.com/yizhizaitaobi/blog/item/cc1290a0a0cd69974610646f.html 2 ...

最新文章

  1. vue2路由移除#号(Apache)
  2. echarts热力背景图_Echarts 图表中设置背景图片
  3. Supporting Multiple Screens 翻译 支持各种屏幕(上)
  4. 比较ArrayList和数组的区别
  5. 生日小助手的详细规划——本博文随时更新,持续有效……
  6. python大学_大学为什么不先开python?
  7. processing作品代码_创意编程 | Processing的初步学习
  8. tomcat连接oracle非常慢,关于myEclipse中tomcat 6.0启动慢的有关问题
  9. Asp.Net的性能问题
  10. 2021 王道考研 数据结构+习题讲解
  11. Vue中 引入外部字体并使用
  12. 你的喜爱——软件测试方法和技术
  13. http 406 java_java – Spring JSON请求获取406(不可接受)
  14. Maya测量尺寸python脚本Mesh Resizer
  15. Creator动态获取,数据文,JSON并使用,枚举Enum,cc.sys.localStorage获取音效的判断 ,冒泡排序做排行榜 ,动态获取提示(cc.loader.loadRes),制作签到
  16. 设计模式-工厂模式的3中不同实现[JAVA]
  17. 第一部分 知己知彼
  18. H5拖拽地址-高德地图VUE版
  19. sql -803 DB2修改主键起始值
  20. endnote中科大版是什么意思_ios14.2rc是什么意思 ios14.2rc版是原来的“GM”版吗

热门文章

  1. linux 邮件客户端 n1,分享|N1:下一代开源邮件客户端
  2. 图文转换软件的需求分析
  3. php 家政服务管理系统
  4. [YTU](3273)吃鸡之团队合作 ---- BFS
  5. matlab图形标注名称_MATLAB图形的标注与修饰
  6. 低电压版cpu java编程_cpu低电压版跟标准电压版区别哪个好
  7. 使用VBA脚本在ppt里实现效果比较成熟的抽奖系统
  8. AI英雄 | 对话Citrix副总裁:人类的意义在于灵魂 通用AI不可能实现!
  9. UDP协议疑难杂症全景解析
  10. 828计算机组成原理和操作系统,解放军信息工程大学2015年《828计算机组成原理与操作系统》考研专业课真题试卷...