相关知识
HBase
的JavaAPI
提供了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);
}
}
最后要记得释放资源:
//要确保尽早释放扫描器实例,一个打开的扫描器会占用很多的服务器端资源,积累多了会占用大量的堆空间。
//一般将close()方法放在finally中,确保程序出现异常也会释放
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