HBase Scanner Caching 扫描器缓存

什么是扫描器缓存

Scan实例可以配置扫描的起始位置,以及其他过滤条件,
每次调用 next 获取下一条记录的时候,默认配置会访问一次 RegionServer,
在网络环境不是很好的情况对性能影响极大,
所以建议配置扫描器缓存

扫描器缓存能干什么

一般来说,使用扫描器会对性能有影响,但是如果配置了Scanner Caching,那么服务器会在内存中开辟一块空间缓存数据,极大提高数据查询效率

如何配置扫描器缓存

有3个地方可以配置:
- HBase Conf文件中配置扫描器缓存
- HTable.setScannerCaching(int scannerCaching)
- Scan.setCaching(int caching)

这三者优先级依次从低到高

代码实例

public static void hbaseScan (String tableName) {
    Scan scan = new Scan();
    scan.setCaching(1000); //配置缓存 1000 条数据
    try {
        HTable table = (HTable) conn.getTable(TableName.valueOf(tableName));
        ResultScanner resultScanner = table.getScanner(scan);
        for (Result result : resultScanner) {
            formatResult(result);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

/**
 * 格式化并输出Result结果
 * @param result
 */
public static void formatResult (Result result) { 
    for (Cell cell : result.rawCells()){
        String rowKey = Bytes.toString (result.getRow());
        String family = Bytes.toString(CellUtil.cloneFamily(cell));
        String qualifier = Bytes. toString (CellUtil. cloneQualifier (cell));
        String value =  Bytes. toString (CellUtil. cloneValue (cell));

        String jsonStr = "{\"rowkey\":\"" + rowKey + 
                    "\",\"family\":\"" + family + 
                    "\",\"qualifier\":\"" + qualifier + 
                    "\",\"value\":\"" + value + 
                    "\"}";
        System.out.println(jsonStr);
    }
}

你可能感兴趣的:(hbase)