前提说明:本文章研究的hbase版本是0.94.12。.
-ROOT-表和.META.表是hbase的元数据表,在-ROOT-表中保存有.META.表的相关信息,在.META.表中保存有业务表的region相关信息,在client端访问具体的业务表的region时需要先通过-ROOT-表找到.META.表,再通过.META.表找到region的位置,即这两个表主要解决了region的快速路由问题。
通过scan命令查看-ROOT-表的数据:
通过上图可以看出-ROOT-表的1行记录共有1个列簇4个列:regioninfo、server、serverstartcode、v,分别介绍如下:
1、regioninfo列
该列包含了.META.表的region信息:region名称、开始rowkey、结束rowkey、encode值:
a)region名称的组成规则:表名称+”,”+startKey+”,”+regionId,regionId的组成规则是:创建region时的时间戳+”.”+encode值(旧版hbase的regionId只有时间戳)+“.”,region名称会被作为-ROOT-表的rowkey,.META.表的rowkey也如此,这种设计可以充分利用hbase的rowkey机制快速定位region。
-ROOT-表中.META. region的regionId比较特殊,.META.表的第一个region没有采用encode码,而是直接指定1,.META.表中业务表的region则完全遵循该规则,如图:
b)startKey,region的开始key,第一个region的startKey是空字符串;
c)endKey,region的结束key,最后一个region的endKey是空字符串;
d)encode值,该值会作为hdfs文件系统的一个目录,如图:
-ROOT-表和.META.表的encode值是固定值,hbase源码如下:
public static String prettyPrint(final String encodedRegionName) { if (encodedRegionName.equals("70236052")) { return encodedRegionName + "/-ROOT-"; } else if (encodedRegionName.equals("1028785192")) { return encodedRegionName + "/.META."; } return encodedRegionName; } |
在hbase的管理界面可以看到-ROOT-表和.META.表的信息:
2、server列:所在regionserver的服务器域名(或者ip)和端口;
3、serverstartcode列:以创建regionserver时的时间戳作为regionserver的startcode,同一个regionserver下的所有region该列值相同,该值作为regionserver的名称的一部分,源代码如下:
public static String getServerName(String hostName, int port, long startcode) { final StringBuilder name = new StringBuilder(hostName.length() + 1 + 5 + 1 + 13); name.append(hostName); name.append(SERVERNAME_SEPARATOR); name.append(port); name.append(SERVERNAME_SEPARATOR); name.append(startcode); return name.toString(); } |
在hbase的管理界面可以看到regionserver的信息:
4、v列,该列是在hbase0.92这个版本开始新增加的列,值是固定的0,主要主用是区别0.92和之前的版本,以便hbase进行版本迁移,源码如下:
/** * The current version of the meta table. * Before this the meta had HTableDescriptor serialized into the HRegionInfo; * i.e. pre-hbase 0.92. There was no META_VERSION column in the root table * in this case. The presence of a version and its value being zero indicates * meta is up-to-date. */ public static final short META_VERSION = 0;
// Update meta with new HRI if required. i.e migrate all HRI with HTD to // HRI with out HTD in meta and update the status in ROOT. This must happen // before we assign all user regions or else the assignment will fail. // TODO: Remove this when we do 0.94. org.apache.hadoop.hbase.catalog.MetaMigrationRemovingHTD. updateMetaWithNewHRI(this); //注:HTD指:HTableDescriptor, HRI指:HRegionInfo
public static final byte [] META_VERSION_QUALIFIER = Bytes.toBytes("v");
//Current meta table version or -1 if no version found. static short getMetaVersion(final Result r) { byte [] value = r.getValue(HConstants.CATALOG_FAMILY, HConstants.META_VERSION_QUALIFIER); return value == null || value.length <= 0? -1: Bytes.toShort(value); }
|
最后需要说明的是:-ROOT-表只存在一个region里,该region不会分裂成多个region ,因为-ROOT-表只保存.META.表的region信息,而.META.表的region理论上不会太多,.META.表可以有多个region,-ROOT-表和.META.表的每一行均描述一个region的信息。
相关推荐
1、[root@centos kl]# rpm -ivh kernel-ml-headers-5.18.10-1.el7.elrepo.x86_64.rpm -- force --nodeps 2、[root@centos kl]# rpm -ivh kernel-ml-tools-libs-5.18.10-1.el7.elrepo.x86_64.rpm --force --nodeps 3...
[root@haoc2008 data]# rpm -ivh xorg-x11-deprecated-libs-6.8.2-1.EL.13.37.i386.rpm warning: xorg-x11-deprecated-libs-6.8.2-1.EL.13.37.i386.rpm: V3 DSA signature: NOKEY, key ID b38a8516 Preparing......
解压缩后会有两个文件:mysql-8.0.18-1.el7.x86_64.rpm-bundle.tar和mysql8安装说明.txt 1、安装 rpm -i 需要安装的包文件名 举例如下: rpm -i example.rpm 安装 example.rpm 包; rpm -iv example.rpm 安装 ...
Centos7 el7.x86_64 官方离线安装包,安装指令为 sudo rpm -ivh pgdg-redhat-repo-latest.noarch.rpm
signed_open-root-20201222(2).deb
-rw-r--r--. 1 root root 4239360 Jun 25 16:54 openssh-9.0p1-1.el7.x86_64.rpm -rw-r--r--. 1 root root 654600 Jun 25 16:51 openssh-clients-9.0p1-1.el7.x86_64.rpm -rw-r--r--. 1 root root 3108976 Jun 25 16...
kernel-3.10.0-957.21.3.el7.x86_64.rpm
本文将详细讨论三星SPH-P100平板电脑上的"stock-ef17-kernel-root-cwm-v2.tar"档案,这是一个专门针对该设备的root解决方案和自定义恢复更新。 首先,"stock-ef17-kernel-root"这部分指的是基于Samsung SPH-P100的...
[root@localhost expect]# yum install --downloadonly --downloaddir=./ expect [root@localhost expect]# ls expect-5.45-14.el7_1.x86_64.rpm [root@localhost expect]# rpm -ivh expect-5.45-14.el7_1.x86_64....
grafana-enterprise-10.1.1-1.x86-64.rpm
下载后,tar xvzf elastic-job-lite-console-3.0.0.M1-SNAPSHOT.tar.gz,解压后,进入bin目录,...默认端口为8899,直接在浏览器里打开:yourip:8899,即可看到你的Elasticjob的控制台啦,默认的账号密码为root/root。
若是用fedora8遇到java: xcb_xlib.c:50:xcb_xlib_unlock: 断言“c->xlib.lock”失败,则试试下面办法,我安装JMF时无法初始化,用程序...[root@localhost ~]$ rpm -Uvh --force libX11-devel-1.0.3-8.fc7.i386.rpm
lede模拟器-openwrt模拟器-malta-mips-be-uClibc.part1.rar,由于文件太大,分成了两个文件上传part1和part2 linux或windows都可以运行,需要安装qemu qemu-system-mips -M malta -hda lede-malta-be-root.ext4 -...
标题 "3560-root-ZL-20200301-ota-ymqn.zip" 提供的信息表明这是一款针对掌讯3560设备的系统更新或升级包,其中包含了root权限的获取。"ota"通常代表Over-the-Air更新,是通过网络对设备进行软件升级的方式。"ymqn...
通过以上步骤,我们可以成功地将 `qt-embedded-linux-opensource-src-4.5.3.tar.gz` 移植到 ARM 架构上,并且能够在 ARM 平台上构建和运行 Qt 应用程序。此过程涉及到的工具包括 ARM-Linux-GCC 交叉编译器、Qt X11 ...
官方离线安装包,亲测可用
[root@centos bin]# uname -sr Linux 2.6.18-238.12.1.el5 [root@centos bin]# svn --version svn,版本 1.6.17 (r1128011) 编译于 May 29 2011,14:51:01 [root@centos bin]# svn info svn://192.168.105.4 路径:...
标题中的"CF-Root-SGS3-v6.0.zip_CF-Root-SGS3-V6.0_ROOT"指的是一款针对三星Galaxy S3 (SGS3) 设备的root工具包,版本为6.0。这个工具包的主要目的是使用户能够获取设备的root权限。在Android操作系统中,root权限...
①修改 jar 包中的application.properties,重点是 zookeeper.address、zookeeper.nodeParent、hdfs.root.dir配置项,hdfs 最好写 ip; ②将core-site.xml、hdfs-site.xml添加到BOOT-INF/classes 下; ③开始修复 `...
Apache Tomcat是一个开源的软件应用服务器,主要用于部署和运行Java Servlet和JavaServer Pages(JSP)应用程序。在本例中,我们关注的是`apache-tomcat-7.0.70.tar.gz`文件,这是一个针对Linux操作系统的Tomcat ...