HBase学习总结(4):HBase的工作原理
一、切分和分配大表
HBase中的表是由行和列组成的。HBase中的表可能达到数十亿行和数百万列。每个表的大小可能达到TB级,有时甚至PB级。这些表会切分成小一点儿的数据单位,然后分配到多台服务器上。这些小一点儿的数据单位叫region。托管region的服务器叫RegionServer。一张表由多个小一点的region组成,如图1所示。
图1 多个小一点的region组成一张表
RegionServer和HDFS DataNode典型情况下并列配置在同一物理硬件上,如图2所示。RegionServer本质上是HDFS客户端,在上面存储/访问数据。主(master)进程分配region给RegionServer,每个RegionServer一般托管多个region。
图2 RegionServer和DataNode典型情况下并列配置在同一台主机上
考虑到基础数据存储在HDFS上,所有客户端都可以在一个命名空间下访问。所有RegionServer都可以访问文件系统里同一个文件,因此RegionServer可以托管任何region,如图3所示。通过DataNode和RegionServer并列配置,理论上RegionServer可以把本地DataNode作为主要DataNode进行读写操作。
图3 RegionServer托管region的示意图
单个region大小由hbase-site.xml文件里的配置参数HBase.hregion.max.filesize决定,当一个region大小变得大于该值时,它会切分成两个region。
二、如何找到region
当一个region分配给RegionServer时,客户端应用如何知道它的位置?
HBase中有两个特殊的表,-ROOT-和.META.,用来查找各种表的region位置在哪里。-ROOT-和.META.也会切分成region,其中,-ROOT-永远不会切分超过一个region,.META.和其他表一样可以按需切分成许多region。
当客户端应用要访问某行时,它先找-ROOT-表,查找什么地方可以找到负责某行的region。-ROOT-指向.META.表的region去寻找答案。.META.表由入口地址组成,客户端应用使用这个入口地址判断哪一个RegionServer托管待查找的region。这个查找过程就像是一个3层分布式B+树(如图4所示),-ROOT-表是B+树的-ROOT-节点,.META. region是-ROOT-节点的叶子,用户表的region是.META. region的叶子。
图4 -ROOT-、.META.和用户表的B+树视图
在图4中,-ROOT-表只包含了一个region,托管在RegionServer RS1上;.META.表包含了3个region,托管在RS1、RS2和RS3上面;用户表T1和T2分别包含3个和4个region,分别在RS1、RS2和RS3上面。
图5 HBase中的表分布在各个RegionServer上
如图5所示,RegionServer 1(RS1)托管用户表T1的region R1和.META.表的region M2;RegionServer 2(RS2)托管用户表的region R2、R3和.META.表的region M1;RegionServer 3(RS3)只托管了-ROOT-。
三、如何找到-ROOT-表
一个叫做ZooKeeper的系统提供了HBase系统的入口点。ZooKeeper是一种集中服务,用来维护配置信息、命名服务、提供分布式同步和提供分组服务等。这是一种高可用的、可靠的分布式配置服务。
客户端与HBase系统的交互分几个步骤,ZooKeeper是入口点。整个交互过程如图6所示。
图6 客户端与HBase系统的交互过程
从图6可以看出,交互步骤为:
第一步:客户端询问ZooKeeper,-ROOT-在哪里?
第二步:ZooKeeper回复客户端,-ROOT-在RegionServer RS1上面。
第三步:客户端询问在RS1上的-ROOT-表,哪一个.META. region可以找到表T1里的行00007?
第四步:RS1上的-ROOT-表回复客户端,在RegionServer RS3上的.META. region M2可以找到。
第五步:客户端询问RS3上的.META. region M2,在哪一个region上可以找到表T1里的行00007以及哪一个RegionServer为它提供服务?
第六步:RS3上的.META. region M2回复客户端,数据在RegionServer RS3上面的region T1R3上。
第七步:客户端发消息给RS3上面的region T1R3,要求读取行00007。
第八步:RS3上面的region T1R3将数据返回给客户端。
本人微信公众号:zhouzxi,请扫描以下二维码:

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Hadoop/Spark相关面试问题总结
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq1010885678/article/details/46916857 Hadoop/Spark相关面试问题总结 面试回来之后把其中比较重要的问题记了下来写了个总结: (答案在后面) 1、简答说一下hadoop的map-reduce编程模型 2、hadoop的TextInputFormat作用是什么,如何自定义实现 3、hadoop和spark的都是并行计算,那么他们有什么相同和区别 4、为什么要用flume导入hdfs,hdfs的构架是怎样的 5、map-reduce程序运行的时候会有什么比较常见的问题 6、简单说一下hadoop和spark的shuffle过程 以下是自己的理解,如果有不对的地方希望各位大侠可以帮我指出来~: 1、简答说一下hadoop的map-reduce编程模型 首先map task会从本地文件系统读取数据,转换成key-value形式的键值对集合 使用的是hadoop内置的数据类型,比如longwritable、text等 将键值对集合输入mapper进行业务...
- 下一篇
Hadoop2源码分析-YARN RPC 示例介绍
1.概述 之前在《Hadoop2源码分析-RPC探索实战》一文当中介绍了Hadoop的RPC机制,今天给大家分享关于YARN的RPC的机制。下面是今天的分享目录: YARN的RPC介绍 YARN的RPC示例 截图预览 下面开始今天的内容分享。 2.YARN的RPC介绍 我们知道在Hadoop的RPC当中,其主要由RPC,Client及Server这三个大类组成,分别实现对外提供编程接口、客户端实现及服务端实现。如下图所示: 图中是Hadoop的RPC的一个类的关系图,大家可以到《Hadoop2源码分析-RPC探索实战》一文中,通过代码示例去理解他们之间的关系,这里就不多做赘述了。接下来,我们去看Yarn的RPC。 Yarn对外提供的是YarnRPC这个类,这是一个抽象类,通过阅读YarnRPC的源码可以知道,实际的实现由参数yarn.ipc.rpc.class设定,默认情况下,其值为:org.apache.hadoop.yarn.ipc.HadoopYarnProtoRPC,部分代码如下: YarnRPC: public abstract class YarnRPC { // .....
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS关闭SELinux安全模块
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装