一般我向别人介绍HBase的时候,都会这样说:
Hbase是加强版的Mysql,存储容量更大、逻辑形式更加灵活。至于BigTable那篇论文的内容,它的意义在于提供了一种更加灵活地组织数据的形式。Hbase以Distributed、Sorted RowKey、MultiDimentional作为亮点,吸引了如Facebook、Amazon、Taobao在内的一大批Internet公司的使用。HBase虽然开源,但是要真正使得你的业务run得漂亮,也不是容易的事情。本系列文章的作者,正是在HBase的使用过程中的一种积累。
1、如何更快Scan一个table中所有的的RowKey
- 建表时确定如果确定table的rowkey范围和大致的分布,在建立表格的时候,确定Region的划分。因为如果不划分Region,请降低参数hbase.hregion.max.filesize的值,让HRegion可以尽快分裂。
- 为Scan添加FirstKeyOnlyFilter。这样做的好处,可以避免扫描Rowkey时,把所有的column都读取到CLient端。
- 如果需要读取Rowkey下的部分Column,可以为Get操作增加ColumnCountGetFilter。
HTable table = new HTable(tableName);
table.setScannerCaching(100);
table.setAutoFlush(false);
Scan s = new Scan();
s.setFilter(new FirstKeyOnlyFilter());
s.setBatch(100);
ResultScanner rs = table.getScanner(s);
long startTime = System.currentTimeMillis();
System.out.println(startTime);
for (Result rr = rs.next(); rr != null; rr = rs.next()) {
Get g = new Get(rr.getRow());
g.setFilter(new ColumnCountGetFilter(100));
System.out.println(Bytes.toString(rr.getRow()));
NavigableMap> valueMap = table.get(g).getNoVersionMap();
for (byte[] family:valueMap.keySet()) {
int i = 0;
for (byte[] val: valueMap.get(family).values()) {
System.out.println(Bytes.toString(val));
}
}
}
System.out.println((System.currentTimeMillis()- startTime) + "ms"); |
文章的脚注信息由WordPress的wp-posturl插件自动生成