hbaseセパレートの簡単実現
2666 ワード
ブログ参照:http://ronxin999.blog.163.com/blog/static/422179202013621111545534/
二つの解決策を提供します。ここで使うのは一番目です。
ここでhbaseのPageFilterを使って簡単な改ページを実現します。
改ページフィルタリングは、Pagesizeパラメータを設定することにより、各ページの数を返します。
クライアントは前回訪問したrowのkey値を覚えておく必要があります。
hbaseのrowは辞書の配列ですので、前回のlastrowは追加の0を加えて新しい開始を表します。またstartKeyの一行はscanに含まれています。
二つの解決策を提供します。ここで使うのは一番目です。
ここで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に含まれています。