最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

HBase源码分析之GET操作之get转化为scan

来源:动视网 责编:小采 时间:2020-11-09 10:55:29
文档

HBase源码分析之GET操作之get转化为scan

HBase源码分析之GET操作之get转化为scan:HBase源码分析之GET操作之get转化为scan 1,还是先看构造函数 public Get(byte [] row) { this(row, null); } public Ge HBase源码分析之GET操作之get转化为scan 1,还是先看构造函数 public Get(byte [] row) { this
推荐度:
导读HBase源码分析之GET操作之get转化为scan:HBase源码分析之GET操作之get转化为scan 1,还是先看构造函数 public Get(byte [] row) { this(row, null); } public Ge HBase源码分析之GET操作之get转化为scan 1,还是先看构造函数 public Get(byte [] row) { this


HBase源码分析之GET操作之get转化为scan 1,还是先看构造函数 public Get(byte [] row) { this(row, null); } public Ge

HBase源码分析之GET操作之get转化为scan

1,还是先看构造函数

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 set = familyMap.get(family);
if(set == null) {
set = new TreeSet(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(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 result = get(get);


return new Result(result);
}


最终GET其实是转化为scan了

/*
* Do a get based on the get parameter.
*/
private List get(final Get get) throws IOException {
Scan scan = new Scan(get);


List results = new ArrayList();


InternalScanner scanner = null;
try {
scanner = getScanner(scan);
scanner.next(results);
} finally {
if (scanner != null)
scanner.close();
}
return results;
}

文档

HBase源码分析之GET操作之get转化为scan

HBase源码分析之GET操作之get转化为scan:HBase源码分析之GET操作之get转化为scan 1,还是先看构造函数 public Get(byte [] row) { this(row, null); } public Ge HBase源码分析之GET操作之get转化为scan 1,还是先看构造函数 public Get(byte [] row) { this
推荐度:
标签: 代码 源代码 get
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top