HBase Java API 开发:表的扫描与扫描的缓存和批量处理 第2关:扫描表中所有的数据

30 篇文章 5 订阅
15 篇文章 11 订阅

相关知识

HBaseJavaAPI提供了Scan类与Resultscanner类,供我们扫描表中的数据,Scan技术类似于数据库系统的游标,利用的是HBase提供的底层顺序存储数据结构。

要扫描一张表三个步骤就可以搞定:

创建Scan扫描对象:

Scan scan = new Scan();

获取Resultscanner对象:

ResultScanner scanner = table.getScanner(scan);

利用ResultScanner对象遍历数据:

for(Result result : scanner){
for (Cell kv : result.rawCells()) {
String family = Bytes.toString(CellUtil.cloneFamily(kv));
String qualifire = Bytes.toString(CellUtil.cloneQualifier(kv));
String value = Bytes.toString(CellUtil.cloneValue(kv));
values.add(value);
System.out.println(family + ":" + qualifire + "\t" + value);
}
}

最后要记得释放资源:

 
  1. //要确保尽早释放扫描器实例,一个打开的扫描器会占用很多的服务器端资源,积累多了会占用大量的堆空间。
  2. //一般将close()方法放在finally中,确保程序出现异常也会释放
  3. scanner.close();

当然你还可以尝试其他方法创建Scan对象和ResultScanner对象,下列代码展示了获取ResultScanner对象和Scan对象的不同方式:

Resultscanner getScanner(Scan scan)
Resultscanner getScanner(byte[] family)
Resultscanner getScanner(byte[] family,byte[] qualifier)
//后两个方法隐式的创建了Scan实例
//Scan类的构造器
Scan()
Scan(byte[] startRow,Filter filter)
Scan(byte[] startRow)
Scan(byte[] startRow,byte[] stopRow)
//[startRow,stopRow)
//Scan的限制条件,限制返回内容
Scan addFamily(byte[] family)
Scan addColumn(byte[] family,byte[] qualifier)

编程要求

到你了,开始吧,编写代码补全右侧scanTable(String tableName)函数,输出表名为tableName所有行中所有列的值。

package step2;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
public class Task {
 public void scanTable(String tablename) throws Exception {
   /********* Begin *********/
   Configuration conf = HBaseConfiguration.create();
   Connection conn = ConnectionFactory.createConnection(conf);
   Table table = conn.getTable(TableName.valueOf(tablename));
   Scan scan = new Scan();
   ResultScanner scanner = table.getScanner(scan);
   for(Result result : scanner){
     for (Cell cell : result.listCells()) {
       System.out.println(new String(CellUtil.cloneValue(cell),"utf-8"));
     }
   } 
   /********* End *********/
 }
}

start-dfs.sh

start-hbase.sh

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值