文档详情

Hbase分页思想以及实现.pdf

发布:2017-05-24约6.52千字共4页下载文档
文本预览下载声明
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
显示全部
相似文档