Hbase分页思想以及实现.pdf
文本预览下载声明
Hbase 分页查询思想
Hbase 解决大数据存储问题,但当其数据量巨大时必然会影响查询效率,而 Scan 命令中有
有时间限制,当查询超时Scan 会停下,设置太大的Scan 时长又会进入无线等待的时间,而
不知道程序进行到哪里。例如,前台长时间得不到查询结果导致一次又一次的重复 Scan,
这不仅会占用大量内存而且在做无用工;其次当需要数据迁移的时候,如果表条目数量巨大,
一次Scan 整一个表,或者一个region 成为奢望,分页扫描就成了唯一的选择,刚好手头有
这样一个需求,前天完成,拿出来分享。
Hbase 分页主要思想是:扫描n 条数据,将第n 条作为下次查询的起始行。这里需要删除第
n 调数据记录,以避免数据重复。
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TimeZone;
import java.util.TreeMap;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.filter.Filter;
import org.apache.hadoop.hbase.filter.PageFilter;
public class HBasedivisionScan {
private int pageSize = 10000;// Default page size.
private int countKey=0;
private MapString, MapString, String dataMap = new TreeMapString, MapString,
String();
private static String keySignal = ;
public int AdvancedClassificKey2ndV(Table table) {
if (null == table) {
System.out.println(:Table is not exist.);
return -1;
}
int control = 0;// recognize the first time
String startRow = keySignal;
String temp_NextStartRow = , tempSpclNum = ;
Filter filter = new PageFilter(pageSize);
Scan scan = new Scan();
scan.setFilter(filter);
// scan.setCaching(pageSize);
scan.setStartRow(startRow.getBytes());
while (true) {
try {
System.out.println( :This is the + control + th times and the page size is
+ pag
显示全部