如何使用scala计算hbase表上的所有行

wnavrhmk  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(444)

我们可以使用hbase shell和以下命令来计算所有行: count 'table_name', INTERVAL=> 1 或者很简单 count 'table_name .
但是如何使用scala编程来实现这一点呢?

lokaqttq

lokaqttq1#

虽然我已经完成了hbase的java客户端,但我研究并发现了以下内容。。java方式代码段:
可以使用keyonlyfilter()仅获取行的键。然后像下面这样循环。。

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

像上面一样,您可以使用下面的scala hbase示例。。
请看javaapi。适应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>...]
    ]
mfuanj7w

mfuanj7w2#

使用java客户机,可以使用rowkeyonlyfilter扫描所有表。通过这种方式,您只将行键传输到您的客户机代码,而不是数据,因此速度会更快。这也是count'tablename'在shell中的作用。

相关问题