HBasecreateTable的服务器端实现源码分析

作者: 云计算机网 分类: 云计算知识 发布时间: 2015-02-28 20:34

HBase的所有请求调用都是通过RPC的机制进行的,RPCServer监听到请求之后会解析请求内容,然后根据解析的方法以及参数调用服务器端实际的方法,这也是远程代理模式的经典做法,createTable的请求最终实现是在HMaster中的,但是实际的表的建立过程是在CreateTableHandler类中的,接下来主要就HBase中表的建立过程进行详细分析。

1. HMaster的createTable实现

如下代码所示,是HMaster中的createTable的流程代码:

 public void createTable(HTableDescriptor hTableDescriptor,                            byte[][] splitKeys) throws IOException {        if (isStopped()) {            throw new MasterNotRunningException();        }String namespace = hTableDescriptor.getTableName().getNamespaceAsString();        ensureNamespaceExists(namespace);        HRegionInfo[] newRegions = getHRegionInfos(hTableDescriptor, splitKeys);        checkInitialized();        sanityCheckTableDescriptor(hTableDescriptor);        if (cpHost != null) {            cpHost.preCreateTable(hTableDescriptor, newRegions);        }        LOG.info(getClientIdAuditPrefix() + " create " + hTableDescriptor);        this.service.submit(new CreateTableHandler(this,                this.fileSystemManager, hTableDescriptor, conf,                newRegions, this).prepare());        if (cpHost != null) {            cpHost.postCreateTable(hTableDescriptor, newRegions);        }    }

在正式创建表之前做的几件事情:
1.检查Master是否正常运行
2.检查索要创建的表的namespace是否存在
3.HRegionInfo类包含了HRegion的相关信息getHRegionInfos(),函数按照splitKeys和表描述信息,获取该表对应的HRegion的信息。

这里有必要解释一下HRegion,HRegion存储了table的数据信息,它包含了每一个row的所有columns,一个table包含1到多个hregion,每一个hregion包含多个HStores,每个HStores包含一部分的Rows和对应部分的Columns。
每个HRegion包含了一个[startKey, endKey),用来标识其保存的row的范围,英雌HRegion可以由TableName和key range唯一确定

4.检查Master是否完成初始化
5.检查表信息是否符合规定
6.建表,建表又分为三个过程:

1. cpHost.preCreateTable(hTableDescriptor, newRegions);2. submit(new CreateTableHandler(this,            this.fileSystemManager, hTableDescriptor, conf,            newRegions, this)3.cpHost.postCreateTable(hTableDescriptor, newRegions);

其中步骤1和3都是为了协处理器预留的钩子函数,方便应用开发人员动态添加新的功能。
接下来主要分析一下步骤2中的建表所做的操作

2. CreateTableHandler 中的建表实现

其实在代码this.service.submit(new CreateTableHandler(this,
this.fileSystemManager, hTableDescriptor, conf,

  • 计算机的硬盘容量与操作系统的硬盘容量存在差异,这不是计算机硬盘安装错误,而是计算机领域的一种正常现象,下面爱站技术频道小编就告诉你这些原因。

    计算机的硬盘容量与操作系统的硬盘容量存在差异,这不是计算机硬盘安装错误,而是计算机领域的一种正常现象,下面爱站技术频道小编就告诉你这些原因。

    a. 硬盘制造商和计算机操作系统对硬盘容量的计算标准不同硬盘制造商在标注硬盘容量时采用的是1000进制,即:1G = 1,000MB,1MB =1,000KB,1KB = 1,000byte ;然而,操作系统在识别硬盘容量时采用的是1024 进制,即:1GB = 1,024MB,1MB = 1,024KB,1KB = 1,024byte。您的电脑硬盘的标称容量采用的是硬盘制造商的计算标准,由于硬盘制造商和操作系统在计算硬盘容量时采用的标准不同,导致了硬盘标称容量和硬盘在操作系统中显示的容量出现差异。  例如,硬盘标称是XG,那么,即使在完全没有被使用的情况下,它在操作系统中显示的容量也只是:X×1000×1000×1000/(1024×1024×1024) ≈ X×0.931 G。  如果硬盘的部分空间已被用于特定用途, 那么操作系统中显示的容量还将小于X×0.931G。  b. 硬盘的部分空间被用于特定用途  由于配备了一键恢复功能,硬盘在出厂前已经划分出一块特定分区,用以存放硬盘镜像文件以及一键恢复程序文件,该部分硬盘空间的具体数值因电脑的机型和安装的操作系统和软件的不同而不同。出于安全考虑,这块分区只能在“磁盘管理”中看到,即通常所说的“隐藏分区”或“服务分区”。此外,在硬盘被分区或格式化后,系统会在硬盘上占用一些空间,提供给系统文件使用。 由于这些原因,您在操作系统中看到的可用硬盘空间总是小于计算机硬盘的额定容量,如果还有需要了解的内容,就继续关注爱站技术频道吧!
  • 相关推荐:

  • 硬盘容量的计算方法和说
  • IT和IT行业的介绍
  • 路由的追踪命令
  • AMD推土机处理器的知识
  • 带你了解ape与mp3的区别
  • scroll lock键的作用
  • 辨别笔记本是否为翻新机
  • H77、Z75、Z77主板的区别
  • 巧克力键盘的介绍
  • 串流服务是什么 云电脑
  • 网站内容禁止违规转载,转载授权联系中国云计算网