1. 程式人生 > >hadoop之hbase資料分頁查詢

hadoop之hbase資料分頁查詢

package page;

import java.io.IOException;
import java.util.Iterator;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import
org.apache.hadoop.hbase.client.HBaseAdmin; import org.apache.hadoop.hbase.client.HTable; 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.filter.Filter; import org.apache.hadoop.hbase.filter.PageFilter; //hbase分頁用到兩個方法,
//一個是scan.setstartrow(startrow.getBytes()) //再一個是hbase的過濾器中pageFilter實現類 //Filter f=new PageFilter(pagesize); public class pageFenYe { static Configuration conf=null; static Connection connect=null; static HBaseAdmin admin=null; static HTable table=null; //獲取表連線物件 和表管理物件 public
static void init() throws IOException{ //載入配置檔案 conf=HBaseConfiguration.create(); conf.set("hbase.zookeeper.quorum", "hadoop02:2181,hadoop03:2181,hadoop04:2181"); //獲取連線 connect = ConnectionFactory.createConnection(conf); //獲取dml的操作控制代碼 需要制定表名的 table = (HTable) connect.getTable(TableName.valueOf("stu_info")); } //設定分頁的顯示的條件-------起始位置、每一頁顯示的資料條數 public static ResultScanner paging(String startrow,int pagesize) throws IOException{ //建立掃描物件 Scan scan = new Scan(); //設定起始行鍵 if(!"".equals(startrow)&&startrow!=null){ scan.setStartRow(startrow.getBytes());//如果輸出的輸入的不合法返回第一頁資料 } //設定分頁過濾 Filter f=new PageFilter(pagesize); scan.setFilter(f); ResultScanner scanner = table.getScanner(scan);//提交scan,將返回結果封裝ResultScanner中 return scanner; } //封裝一個(頁碼與起始位置的方法)轉換方法 public static ResultScanner fenye(int index,int pagesize) throws IOException{ String startrow=getStartRow(index,pagesize); //起始位置與index的轉發方法 ResultScanner fenye = paging(startrow, pagesize); //呼叫分頁方法返回resultscanner物件 return fenye; } //真正的轉化方法 public static String getStartRow(int index, int pagesize) throws IOException { String startrow=""; for(int i=1;i<index;i++){ ResultScanner fenye = paging(startrow,pagesize+1);//從第一頁遍歷,每次多取一個值----第二頁的第一條資料 String lastrow=""; Iterator<Result> iterator = fenye.iterator(); Result next=null; while(iterator.hasNext()){ next = iterator.next(); //由於是迭代器,所有next得到的是最後一個值 } lastrow = new String(next.getRow()); startrow = lastrow; //最後得到所在頁碼的第一條資料,將其賦值給startrow並返回 } return startrow; } public static void main(String[] args) throws IOException { init(); //最後將查詢的頁遍歷輸出 ResultScanner fenye = fenye(2, 5); Iterator<Result> iterator = fenye.iterator(); while(iterator.hasNext()){ Result next = iterator.next(); System.out.println(new String(next.getRow())); //這裡我只是輸出了行鍵 } } }