HBase1.0.0源码分析之请求处理流程分析以Put操作为例(一)

作者: 云计算机网 分类: 云计算知识 发布时间: 2015-03-01 07:46
如下面的代码所示,是HBase Put操作的简单代码实例,关于代码中的Connection connection = ConnectionFactory.createConnection(conf),已近在前一篇博 HBase1.0.0源码分析之Client启动连接流程,中介绍了链接的相关流程以及所启动的服务信息。
            TableName tn = TableName.valueOf("test010");            try (Connection connection = ConnectionFactory.createConnection(conf)) {                try (Table table = connection.getTable(tn)) {                    Put put = new Put("ROW1".getBytes());                    put.addColumn("CF1".getBytes(),"column1".getBytes(),"value1".getBytes());                    put.addColumn("CF2".getBytes(),"column1".getBytes(),"value1".getBytes());                    table.put(put);                    System.out.println("done!");                }            }
本文着重解析put是如何被一步步的传送到服务器端以及被服务器端调用的。首先我们有必要回顾一下关于Connection的类型结构,如下图所示:HConnectionImplementation 类是实际负责和服务器连接的,要想对表的数据操作,例如例子中的put我们首选需要获取一个Table的的实例,这个可以从connection中拿到,

        public HTableInterface getTable(TableName tableName, ExecutorService pool) throws IOException {            if (managed) {                throw new NeedUnmanagedConnectionException();            }            return new HTable(tableName, this, tableConfig, rpcCallerFactory, rpcControllerFactory, pool);        }
Table其实就是一个操作接口,真正的实现类是HTable,HTable可以负责对单一的HBase的数据表进行数据的插入删除等数据层次的操作,该类目前只是HBase Internal 的,对外的接口是Table,获取HTable实例之后就是对操作进行执行了,
  /**   * {@inheritDoc}   * @throws IOException   */  @Override  public void put(final Put put) throws IOException {    getBufferedMutator().mutate(put);    if (autoFlush) {      flushCommits();    }  }
以上的代码就是HTable操作的原型,这里进行了一系列的调用,我们一一分析,首先是getBufferedMutator()函数,
该函数返回一个实现的实例BufferedMutatorImpl,该类和HTable类似,负责和单个HBase的table通信,但是他对put的操作是batch的,并且具有异步执行的能力
mutate在内部会调用doMutate的方法:
  private void doMutate(Mutation m) throws InterruptedIOException,      RetriesExhaustedWithDetailsException {    if (closed) {      throw new IllegalStateException("Cannot put when the BufferedMutator is closed.");    }    if (!(m instanceof Put) && !(m instanceof Delete)) {      throw new IllegalArgumentException("Pass a Delete or a Put");    }    // This behavior is highly non-intuitive... it does not protect us against    // 94-incompatible behavior, which is a timing issue because hasError, the below code    // and setter of hasError are not synchronized. Perhaps it should be removed.    if (ap.hasError()) {      writeAsyncBuffer.add(m);      backgroundFlushCommits(true);    }    if (m instanceof Put) {      validatePut((Put) m);    }    currentWriteBufferSize += m.heapSize();    writeAsyncBuffer.add(m);    while (currentWriteBufferSize > writeBufferSize) {      backgroundFlushCommits(false);    }  } 
  • 虚拟化整体采用率虽然看起来高,但是这个数字掩盖了另一个事实,即数据保护方面的顾虑阻碍了关键型应用程序的虚拟化,使这些公司在关键应用上的虚拟化程度比较低。

    Veeam Software指出了这个事实。

    Veeam产品战略高级总监Doug Hazelman表示:"几乎每家公司都有虚拟化行动,但是问题是他们的虚拟化程度大小。

    "

    Veeam调查了位于美国、英国、德国和法国的员工人数超过1000人的公司,访问了500位首席信息官,发现44%的首席信息官表示在一些任务关键型工作负荷上会避免采用虚拟化,因为他们担心虚拟化会影响备份和恢复。

    目前,许多公司只备份三分之二的(68%)的虚拟化数据。

    61%使用物理手段来进行备份和恢复的企业从现在开始会针对虚拟化改变他们的数据保护方式。

    Hazelman表示:"此次调查的目的是探寻人们在备份和数据恢复上的行为。

    我们的发现是,比较容易使用虚拟化的领域一般都采用虚拟化了,但是顶层的应用还没有虚拟化。

    这里面有一些数据保护方面的顾虑。

    "

    63%的回答者使用单一产品来同时备份他们的物理和虚拟服务器。

    在这种方式下,他们仍然视虚拟机为物理服务器,因而限制了虚拟化的使用程度。

    因此,这些企业在虚拟化的任务关键型工作负荷上没有得到应有的最佳的保护水平。

    Hazelman表示:"他们担心数据保护和数据恢复。

    如果你观察他们一贯的行为方式,你会发现这是不够的。

    他们在等待第三方解决方案来使数据保护更加成熟一些。

    "

    在被问到关于在虚拟环境中使用传统基于物理的备份工具的缺点时,超过一半的回答者(51%)指出这种方式太昂贵。

    除了这个,40%的回答者指出恢复速度太慢,还有40%的回答者指出缺点是需要安装软件代理。

    实际上,在使用传统备份工具的时候,IT部门指出标准恢复流程的执行(比如文件层次的恢复)变得更加复杂了。

    大部分回答者(66%)要么首先恢复整个虚拟机然后恢复单个文件,要么是保持两个备份,一个在系统层次上,一个在文件层次上。

    IT总监们也开始重新评估他们的数据保护方式。

    61%物理数据保护工具的使用者表示他们考虑针对虚拟化改变数据保护方式,59%的人计划部署专门的虚拟化解决方案来处理他们的虚拟服务器。

    他们这么做的原因很清楚:更快的恢复速度(63%),更快的备份速度(56%),更低的成本(54%)。#p#分页标题#e#

    Hazelman表示:"对VAR(增值分销商)而言,这是一个很大的机遇。

    他们应该在这方面教育他们的顾客。

    他们需要寻找虚拟领域内最佳的解决方案,无论是平台本身还是支持虚拟化的生态系统。

    对于像我们这样的独立软件厂商而言,我们的任务就是开发更好的产品。

    "

    (责任编辑:admin)

  • 相关推荐:

  • 存储分析:数据保护影响
  • 简化部署戴尔虚拟化解决
  • 深入分析:虚拟化技术已
  • 虚拟化分析:从概念到应
  • 云计算服务火热服务器未
  • 大数据处理分析的六大工
  • 2016年中国服务器行业发
  • 5.28黄金走势分析 操作建
  • 通常电脑故障排除的方法
  • 电脑开机自动断电原因分
  • 网站内容禁止违规转载,转载授权联系中国云计算网