2016-07-22 10 views
2

hbaseシェルを使用してすべての行を数えることができます。count 'table_name', INTERVAL=> 1または単にcount 'table_nameです。Scalaを使用してHbaseテーブルのすべての行を数える方法

しかし、どのようにプログラミングスカラ座を使用してこれを行うには?私はHBaseのためのJavaクライアントで行われているが

+0

Javaクライアント –

+0

を使用すると、Javaプログラミング、https://github.com/sel-fish/hbase-experiments/blob/master/src/test/java/com/mogujieを使用してこれを実現することができます。 /mst/hbase/mapreduce/RowCounterTest.java、おそらくそれはあなたにいくつかのヒントを与えるでしょう –

+0

私は、答えはあなたが使用するクライアントに多く依存すると主張します。 標準のJavaクライアントは、具体的にスカラ座からのHBaseを使用するための火傷とHPasteがあります。それからasynchbase ...あなたに答えを与えるために、あなたが使っているクライアントに関するいくつかの情報が役に立つでしょう。 – juwi

答えて

1

は、私が研究して見つけた以下.. Javaの道のコードスニペット:

あなたはKeyOnlyFilterは()行のキーのみを取得するために使用することができます。その後、ループ

Please look at the Java API. Adaptation to scala should be relatively easy. The example below shows part of the sample Java code adapted to scala:

付加情報としてしかし
import org.apache.hadoop.hbase.HBaseConfiguration 
import org.apache.hadoop.hbase.client.{HBaseAdmin,HTable,Put,Get} 
import org.apache.hadoop.hbase.util.Bytes 


val conf = new HBaseConfiguration() 
val admin = new HBaseAdmin(conf) 

// list the tables 
val listtables=admin.listTables() 
listtables.foreach(println) 

// let's insert some data in 'mytable' and get the row 

val table = new HTable(conf, "mytable") 

val theput= new Put(Bytes.toBytes("rowkey1")) 

theput.add(Bytes.toBytes("ids"),Bytes.toBytes("id1"),Bytes.toBytes("one")) 
table.put(theput) 

val theget= new Get(Bytes.toBytes("rowkey1")) 
val result=table.get(theget) 
val value=result.value() 
println(Bytes.toString(value)) 

(および最良の方法よりも..あなたは以下のScalaのHBaseの例を使用することができ、上記のような

for (Result rs = scanner.next(); rs != null; rs = scanner.next()) { 
     number++; 
    } 

..以下のようなjavaまたはscala)を参照してください。

は、テーブルのすべての行を数えるmapreduceジョブです。これは、メタデータの矛盾の任意の懸念がある場合はHBaseは、テーブルのすべてのブロックを読み取ることができることを保証するために、健全性チェックとして使用するための良いユーティリティです。これは、すべて単一のプロセスでのMapReduceを実行しますが、あなたはそれを悪用するための場所でのMapReduceのクラスタを持っている場合、それはより速く実行されます。

$ hbase org.apache.hadoop.hbase.mapreduce.RowCounter <tablename> 

Usage: RowCounter [options] 
    <tablename> [   
     --starttime=[start] 
     --endtime=[end] 
     [--range=[startKey],[endKey]] 
     [<column1> <column2>...] 
    ] 
0

Javaクライアントでは、RowKeyOnlyFilterですべてのテーブルをスキャンできます。このようにすると、データではなくクライアントコードにのみ行キーを転送するので、処理速度が向上します。これは、 'tablename'がシェルでもカウントするものです。

関連する問題