我们可以使用带有此命令的hbase shell来计算所有行数:count 'table_name', INTERVAL=> 1
或者只是简单的count 'table_name
。
但是如何使用Scala 编程来做到这一点?
我们可以使用带有此命令的hbase shell来计算所有行数:count 'table_name', INTERVAL=> 1
或者只是简单的count 'table_name
。
但是如何使用Scala 编程来做到这一点?
虽然我已经完成了 Hbase 的 java 客户端,但我研究并发现了以下.. Java 方式代码片段:
您可以使用KeyOnlyFilter () 仅获取行的键。然后像下面这样循环..
for (Result rs = scanner.next(); rs != null; rs = scanner.next()) {
number++;
}
像上面一样,您可以使用下面的 scala hbase 示例..
请查看 Java API。适应scala应该相对容易。下面的示例显示了适用于 scala 的示例 Java 代码的一部分:
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))
但是,作为附加信息(以及比 java 或 scala 最好的方法),请参见下文
RowCounter
是一个 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>...]
]
用java客户端,可以扫描所有表,RowKeyOnlyFilter有效。通过这种方式,您只将行键传输到您的客户端代码,而不是数据,因此它会更快。这也是 count 'tablename' 在 shell 中所做的。