Welcome 微信登录

首页 / 数据库 / MySQL / HBase源码分析之GET操作之get转化为scan

HBase源码分析之GET操作之get转化为scan1,还是先看构造函数  public Get(byte [] row) {
    this(row, null);
  }
  public Get(byte [] row, RowLock rowLock) {
    this.row = row;
    if(rowLock != null) {
      this.lockId = rowLock.getLockId();
    }
  }  public Get addFamily(byte [] family) {
    familyMap.remove(family);
    familyMap.put(family, null);
    return this;
  }   public Get addColumn(byte [] family, byte [] qualifier) {
    NavigableSet<byte []> set = familyMap.get(family);
    if(set == null) {
      set = new TreeSet<byte []>(Bytes.BYTES_COMPARATOR);
    }
    set.add(qualifier);
    familyMap.put(family, set);
    return this;
  public Get addColumn(final byte [] column) {
    if (column == null) return this;
    byte [][] split = KeyValue.parseColumn(column);
    if (split.length > 1 && split[1] != null && split[1].length > 0) {
      addColumn(split[0], split[1]);
    } else {
      addFamily(split[0]);
    }
    return this;
  }
2,HTable.java  里的get方法,实则是调用了HregionServer的get方法。  public Result get(final Get get) throws IOException {
    return connection.getRegionServerWithRetries(
        new ServerCallable<Result>(connection, tableName, get.getRow()) {
          public Result call() throws IOException {
            return server.get(location.getRegionInfo().getRegionName(), get);
          }
        }
    );
  }
3,再来看看HregionServer.java  /** {@inheritDoc} */
  public Result get(byte[] regionName, Get get) throws IOException {
    checkOpen();
    requestCount.incrementAndGet();
    try {
      HRegion region = getRegion(regionName);
      return region.get(get, getLockFromId(get.getLockId()));
    } catch (Throwable t) {
      throw convertThrowableToIOE(cleanup(t));
    }
  }再来看看Hregion的get方法:1),首先是检测family,保证Table中的family与get中的一致  public Result get(final Get get, final Integer lockid) throws IOException {
    // Verify families are all valid
    if (get.hasFamilies()) {
      for (byte [] family: get.familySet()) {
        checkFamily(family);
      }
    } else { // Adding all families to scanner
      for (byte[] family: regionInfo.getTableDesc().getFamiliesKeys()) {
        get.addFamily(family);
      }
    }
    List<KeyValue> result = get(get);
    return new Result(result);
  }
最终GET其实是转化为scan了 /*
 * Do a get based on the get parameter.
 */
  private List<KeyValue> get(final Get get) throws IOException {
    Scan scan = new Scan(get);
    List<KeyValue> results = new ArrayList<KeyValue>();
    InternalScanner scanner = null;
    try {
      scanner = getScanner(scan);
      scanner.next(results);
    } finally {
      if (scanner != null)
        scanner.close();
    }
    return results;
  }Hive与MySQL安装配置MySQL 删除表中重复记录相关资讯      Hbase  HBase源码分析  HBase scan 
  • HBase 参考文档翻译之 Getting   (08月15日)
  • HBase应用开发回顾与总结系列  (01月10日)
  • Apache HBase 2015年发展回顾与未  (01月04日)
  • 为啥HBase需要搭建SQL引擎层  (02月19日)
  • HBase表数据分页处理  (01月10日)
  • Hbase VS Oracle  (11/21/2015 20:22:40)
本文评论 查看全部评论 (0)
表情: 姓名: 字数

版权所有©石家庄振强科技有限公司2024 冀ICP备08103738号-5 网站地图