hbaseセパレートの簡単実現

2666 ワード

ブログ参照:http://ronxin999.blog.163.com/blog/static/422179202013621111545534/
二つの解決策を提供します。ここで使うのは一番目です。
 
ここでhbaseのPageFilterを使って簡単な改ページを実現します。
 
改ページフィルタリングは、Pagesizeパラメータを設定することにより、各ページの数を返します。
クライアントは前回訪問したrowのkey値を覚えておく必要があります。
 
 
package hbaseTest;  
  
import org.apache.hadoop.conf.Configuration;  
import org.apache.hadoop.hbase.HBaseConfiguration;  
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;  
import org.apache.hadoop.hbase.util.Bytes;  
  
import java.io.IOException;  
  
/** 
 * Hello world! 
 */  
public class PageFilterExample {  
    public static void main(String[] args) throws IOException {  
        Configuration config = HBaseConfiguration.create();  
        config.set("hbase.zookeeper.quorum", "QT-H-0038");  
  
        String tableName = "testTable";  
        String cfName = "colfam1";  
        final byte[] POSTFIX = new byte[] { 0x00 };  
        HTable table = new HTable(config, tableName);  
        Filter filter = new PageFilter(15);  
        byte[] lastRow = null;  
        int totalRows = 0;  
        while (true) {  
            Scan scan = new Scan();  
            scan.setFilter(filter);  
            if(lastRow != null){  
                //       POSTFIX  ,        
                byte[] startRow = Bytes.add(lastRow,POSTFIX);  
                scan.setStartRow(startRow);  
            }  
            ResultScanner scanner = table.getScanner(scan);  
            int localRows = 0;  
            Result result;  
            while((result = scanner.next()) != null){  
                System.out.println(localRows++ + ":" + result);  
                totalRows ++;  
                lastRow = result.getRow();  
            }  
            scanner.close();  
            if(localRows == 0) break;  
        }  
        System.out.println("total rows:" + totalRows);  
    }  
  
}  
 
hbaseのrowは辞書の配列ですので、前回のlastrowは追加の0を加えて新しい開始を表します。またstartKeyの一行はscanに含まれています。