2016-07-22 15 views
2

zählen wir können alle Zeilen mit HBASE Shell mit diesem Befehl zählen: count 'table_name', INTERVAL=> 1 oder einfach count 'table_name.Wie alle Zeilen in Hbase-Tabelle mit Scala

Aber wie geht das mit Scala Programmierung?

+0

Sie können den Java-Client verwenden –

+0

hier ist ein Beispiel, um das mit Java-Programmierung zu erreichen, https://github.com/selfish/hbase-experiments/blob/master/src/test/java/com/mogujie /mst/hbase/mapreduce/RowCounterTest.java, vielleicht gibt es Ihnen einige Hinweise –

+0

Ich würde argumentieren, dass die Antwort sehr davon abhängt, welchen Client Sie verwenden. Es gibt den Standard-Java-Client, Verbrühung und HPaste speziell für die Verwendung von HBase von Scala. Dann gibt es asynchbase ... Um Ihnen eine Antwort zu geben, wären einige Informationen über den von Ihnen verwendeten Client hilfreich. – juwi

Antwort

1

Obwohl ich mit Java-Client für Hbase getan haben, ich recherchiert und herausgefunden, die unten .. Java Art und Weise Code-Schnipsel:

können Sie verwenden KeyOnlyFilter() nur erhalten Schlüssel der Zeilen . und dann Schleife wie unten ..

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

wie oben Sie das unten scala hbase Beispiel verwenden können ..

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)) 

jedoch als zusätzliche Informationen (und beste Art und Weise als java oder scala) siehe unten

RowCounter ist ein mapreduce-Job zum Zählen aller Zeilen einer Tabelle. Dies ist ein gutes Dienstprogramm, das als Plausibilitätsprüfung verwendet wird, um sicherzustellen, dass HBase alle Blöcke einer Tabelle lesen kann, wenn Bedenken hinsichtlich der Metadateninkonsistenz bestehen. Es wird die mapreduce alle in einem einzigen Prozess ausführen, aber es wird schneller ausgeführt, wenn Sie einen MapReduce-Cluster zur Ausnutzung haben.

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

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

Mit Java-Client können Sie alle Tabellen scannen mit RowKeyOnlyFilter ist wirksam. Auf diese Weise übertragen Sie nur Zeilenschlüssel an Ihren Client-Code, nicht an Daten, so dass es schneller geht. Das ist es, was 'Tabellenname' in der Shell auch tut.