`
无尘道长
  • 浏览: 160506 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

看懂-ROOT-表和.META.表

阅读更多

    前提说明:本文章研究的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+”,”+regionIdregionId的组成规则是:创建region时的时间戳+”.”+encode值(旧版hbase的regionId只有时间戳)+.region名称会被作为-ROOT-表的rowkey.META.表的rowkey也如此,这种设计可以充分利用hbase的rowkey机制快速定位region。

        -ROOT-表中.META. regionregionId比较特殊,.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的信息。

 

 

 

  • 大小: 6.8 KB
  • 大小: 9.8 KB
  • 大小: 5.4 KB
  • 大小: 1.7 KB
  • 大小: 15.5 KB
  • 大小: 3.3 KB
  • 大小: 1.5 KB
分享到:
评论

相关推荐

    Linux kernel离线升级(V5.18.10-1.el7.elrepo.x86-64 及有关依赖包)

    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...

    xorg-x11-libs-6.8.2-1.EL.52.i386.rpm

    [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.zip

    解压缩后会有两个文件: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 安装 ...

    signed_open-root-20201222(2).deb

    signed_open-root-20201222(2).deb

    免费 openssh-9.0p1-1.el7.x86_64 for RHEL/CentOS 7 升级RPM包

    -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...

    sph-p100,stock-ef17-kernel-root-cwm-v2.tar.rar

    本文将详细讨论三星SPH-P100平板电脑上的"stock-ef17-kernel-root-cwm-v2.tar"档案,这是一个专门针对该设备的root解决方案和自定义恢复更新。 首先,"stock-ef17-kernel-root"这部分指的是基于Samsung SPH-P100的...

    expect-5.45-14.el7_1.x86_64.zip 在 centos7 上测试通过

    [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

    grafana-enterprise-10.1.1-1.x86-64.rpm

    elastic-job-lite-console-3.0.0.M1.tar.gz

    下载后,tar xvzf elastic-job-lite-console-3.0.0.M1-SNAPSHOT.tar.gz,解压后,进入bin目录,...默认端口为8899,直接在浏览器里打开:yourip:8899,即可看到你的Elasticjob的控制台啦,默认的账号密码为root/root。

    libX11-1.0.3-8.fc7.i386和libX11-devel-1.0.3-8.fc7.i386

    若是用fedora8遇到java: xcb_xlib.c:50:xcb_xlib_unlock: 断言“c-&gt;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

    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-ZL-20200301-ota-ymqn.zip" 提供的信息表明这是一款针对掌讯3560设备的系统更新或升级包,其中包含了root权限的获取。"ota"通常代表Over-the-Air更新,是通过网络对设备进行软件升级的方式。"ymqn...

    qt-embedded-linux-opensource-src-4.5.3.tar.gz 移植

    通过以上步骤,我们可以成功地将 `qt-embedded-linux-opensource-src-4.5.3.tar.gz` 移植到 ARM 架构上,并且能够在 ARM 平台上构建和运行 Qt 应用程序。此过程涉及到的工具包括 ARM-Linux-GCC 交叉编译器、Qt X11 ...

    centos-linux-repos-8-3.el8.noarch(1).rpm

    官方离线安装包,亲测可用

    CollabNetSubversion-client-1.6.17-1.x86_64.rpm (注意这是 64 位的)

    [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

    标题中的"CF-Root-SGS3-v6.0.zip_CF-Root-SGS3-V6.0_ROOT"指的是一款针对三星Galaxy S3 (SGS3) 设备的root工具包,版本为6.0。这个工具包的主要目的是使用户能够获取设备的root权限。在Android操作系统中,root权限...

    hbase-meta-repair-hbase-2.0.2.jar

    ①修改 jar 包中的application.properties,重点是 zookeeper.address、zookeeper.nodeParent、hdfs.root.dir配置项,hdfs 最好写 ip; ②将core-site.xml、hdfs-site.xml添加到BOOT-INF/classes 下; ③开始修复 `...

    3518C-008-root-ZL-ota-20200104-ymqn.zip

    此增量包只能用于掌讯3518C-V008-root专用, 基于版本200104....使用方法:将3518C-008-root-ZL-ota-20200104-ymqn.zip放U盘根目录,掌讯车机打开车载设置,系统信息,安卓升级,即可。 作 者:一梦千年

    apache-tomcat-7.0.70.tar.gz

    Apache Tomcat是一个开源的软件应用服务器,主要用于部署和运行Java Servlet和JavaServer Pages(JSP)应用程序。在本例中,我们关注的是`apache-tomcat-7.0.70.tar.gz`文件,这是一个针对Linux操作系统的Tomcat ...

    lede模拟器-openwrt模拟器-malta-mips-be-uClibc.part2.rar

    lede模拟器-openwrt模拟器-malta-mips-be-uClibc.part1.rar,由于文件太大,分成了两个文件上传part1和part2 linux或windows都可以运行,需要安装qemu qemu-system-mips -M malta -hda lede-malta-be-root.ext4 -...

Global site tag (gtag.js) - Google Analytics