Hbase APIでよく使われる種類の紹介と使用

10442 ワード

もっと読む
Hbase APIの一般的なアプリケーション
ネット上のHbaseの紹介はたくさんあります。ケースも多いです。自分でデモを書きました。簡単にまとめます。
HBase常用類の紹介。
JAVA APIとHBaseデータベースモデルの関係
JAVA類
Hbaseデータモデル
HBaseAdmin
データベース(database)
HBaseConfigration
HTable
テーブル(テーブル)
HTaboleDescriptor
列族(Column Family)
Put
行列の操作
Get
Scanner
 
JAVA APIが提供するこれらの機能について説明します。彼らとどのような関係がありますか?
1.HBaseConfigration
関係:org.apache.hadoop.hbase.HBaseConfigration
このようなことによって、HBaseを配置することができます。
使い方例:Configration config=HBaseConfigration.creat()
説明:HBaseConfigration.create()デフォルトでは、クラスパスからhbase-site.xmlの構成情報を検索し、Configrationを初期化します。
2.HBaseAdmin
関係:org.apache.hadoop.hbase.client.HBaseAdmin
役割:インターフェース関係HBaseデータベースのテーブル情報を提供します。
使用法:HBaseAdmin admin=new HBaseAdmin(config)
3.HTable Descriptor
関係:org.apache.hadoop.hbase.HTable Descriptor
機能:HTable Descriptor類は表の名前と表の列族情報を含んでいます。
使い方:HTable Descriptor httd=new HTable Descriptor;
           Htd.addFamily(new HColumn Descripter);
4.HColumn Descriptor
関係:org.apache.hadoop.hbase.HColumn Descriptor
役割:HColumn Descriptorカラム族を維持する情報
使い方:HTable Descriptor httd=new HTable Descriptor;
           Htd.addFamily(new HColumn Descripter);
5 HTable
関係:org.apache.hadoop.hbase.client.HTable
役割:HTableとHBaseの表通信
使い方:HTable tab=new HTable(config、Bytes.toBytes);
           ResultScanner sc=tab.get Scanner(Bytes.toBytes);
説明:テーブル内のファミリーファミリーファミリーファミリーファミリーのすべてのデータを取得します。
6.Put
関係:org.apache.hadoop.hbase.client.Put
作用:単一行のデータを取得する
使い方:HTable=new HTable(config、Bytes.toBytes);
           Put put=new Put(row);
           p.add(family、qualifer、value);
説明:テーブルテーブルテーブルテーブルテーブルテーブルに「family、qualifer、value」で指定された値を追加します。
7.Get
関係:org.apache.hadoop.hbase.client.Get
作用:単一行のデータを取得する
使い方:HTable=new HTable(config、Bytes.toBytes);
           Get get=new Get(Bytes.toBytes(row)
           Result result=table.get(get)
説明:テーブルのrow行の対応データを取得する
8.Result Scanner
関係:インターフェース
役割:値を得るインターフェース
使い方:ResultScanner scanner=table.getScanner(Bytes.toBytes);
           For(Result rowResult:scanner){
                   Bytes[]str=rowResult.getValue(family,column);
)
説明:行の列の値を循環的に取得します。
下の例は上で提供したクラスとインターフェースを使います。
例1:
/**
     * テーブル内のすべてのデータを取得します。
     */
    @Suppres Warnings(「unchecked」)
    publicstatic List get DateAll(String tableaname){
       ResultScanner rs=null;
       HTableテーブル  = null
       try{
           テーブル=new HTable(cfg、tableaname)
           Scan s=new Scan()
           //全表をスキャンすると性能がよくないです。
           rs=table.getScanner(s);
           for(Result r=rs.next();r!=null;r=rs.next()                       for(KeyValue kv:r.raw(){
                  System.out.println(new String(kv.getValue);
              }
           }
       } catch(Exception e){
           returnnull
       }finally{
           s.close();
       }
       return list;
    }
HBaseは大きなデータの分散型データベースです。全表スキャンを使うと不合理に違いないです。以下の例を比較例1によって最適化します。
例2
/**
     * rowkeyの開始と終了のスキャンデータを指定します。
     */
    @Suppres Warnings(「unchecked」)
    publicstatic List get DateAll(String tableaname){
       ... //紙面の原因は省略する
       try{
           テーブル=new HTable(cfg、tableaname)
           Scan s=new Scan()
           //rowkeyによってデータの開始と終了を指定します。性能は例1よりも高いです。 
            s.set StartRow(Bytes.toBytes(「201-12-22」);
           s.set StopRow(Bytes.toBytes(「201-12-23」);
           rs=table.getScanner(s);
           ... //紙面の原因は省略する
       } catch(Exception e){
           ...//紙面の原因は省略する
    }
スキャナscan.set StartRow(Bytes)とscan.set StopRow(Bytes)を使って検索したデータがまだ結果集を満足できない場合、以下のいくつかの種類が役に立ちます。彼はFilterです。
クライアント要求フィルタ
A.      Filterを一つずつ話してください。
1.       FilterList  
FilterListはフィルタリストを表し、フィルタ間には
FilterList.Operator.MUSSTUPASSUALLと
FilterList.Operator.MUSSTASSONEの関係は、フィルタの「または」関係を示します。
以下のFilterListリストでは、同じ属性の「value 1」または「value 2」をチェックします。 。
FilterList list=new FilterList(FilterList.Operator.MUSST PASSONE);
Single ColumnValueFilter 1=new SingleColumnValueFilter(Bytes.toBytes),Bytes.toBytes(「column」)、CompreOp.EQUAL、Bytes.toByttes(value 1)
list.add(filter 1)
Single ColumnValueFilter 2=new SingleColumnValueFilter(Bytes.toBytes),Bytes.toBytes(「column」)、CompreOp.EQUAL、Bytes.toByttes(「value2」)
List.add(filter 2)
 
2.       Single ColumnValueFilter   
Single ColumnValueFilterは、列の値が等しい(CompreOp.EQUAL)、および(CompreOp.NOTUQUAL)、または範囲(e.g.CompreOp.GREATER)をテストします。列の値と文字列'my valuesが等しいという例を示します。
SingleColumnValueFilter filter = new SingleColumnValueFilter(Bytes.toBytes(“cFamily”), Bytes.toBytes(“column”), CompareOp.EQUAL, Bytes.toBytes("values"));
scan.setFilter(filter);
3.       ColumnPrefixFilter
ColumnPrefixFilterは、列名プレフィックス値が等しいことを指定するために使用されます。
Byte[] prefix = Bytes.toBytes(“values”);
Filter f = new ColumnPrefixFilter(prefix);
scan.setFilter(f);
4.       MultileColumnPrefixFilter
Multiple ColumnPrefixFilterとColumnPrefixFilterの挙動は同じですが、複数のプレフィックスを指定することができます。
byte[][] prefixes = new byte[][] {Bytes.toBytes("value1"), Bytes.toBytes("value2")};
Filter f = new MultipleColumnPrefixFilter(prefixes);
scan.setFilter(f);
5.       Qualfier Filter
Qualfier Filterは列名に基づくフィルタです。
Filter f = new QualifierFilter(“QualifierName”);
scan.setFilter(f);
6.       RowFilter
RowFilterはrowkeyフィルタで、通常はrowkeyによって範囲を指定する場合、scanスキャナーのStartRowとStopRowを使った方がいいです。Rowkeyも使えます。
Filter f = new RowFilter(“rowkey”);
scan.setFilter(f);
B.コンパレータ
7.       RegexString Comprator
RegexStrigCompratorは正規表現をサポートするコンパレータです。
フィルターにコンパレータを合わせると便利です。下のコードを見てください。
説明します。コードの中の緑のフォントに表示されているコードが正規のコンパレータの使い方です。パラメータregは正規の検証のルールです。
HTable table = new HTable(cfg,"datainfo");
Scan scan = new Scan();
String reg = "^136([0-9]{8})$";//  136      
RowFilter filter = new RowFilter(CompareOp.EQUAL, 
new RegexStringComparator(reg));
scan.setFilter(filter);
ResultScanner rs = table.getScanner(scan);
for(Result rr : rs){
for(KeyValue kv : rr.raw()){
         ...
}
}
8.       Substring Comprator
Substring Compratorは、サブストリングが値に存在するかどうかを検出するために使用されます。
//  values            
SubstringComparator comp = new SubstringComparator("values");
SingleColumnValueFilter filter = new SingleColumnValueFilter(Bytes.toBytes(“family”), Bytes.toBytes(“column”),CompareOp.EQUAL, Bytes.toBytes(“value”));
scan.setFilter(filter);
基本的な使い方はこれぐらいです。ご指摘ください。