自己摸索了一下,又看了下hbase的Java api 大致搞出了一个样子,但还是有好多问题
package com.hbase.test;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
import java.io.IOException;
public class Test1 {
public static void main(String[] args) throws IOException {
Configuration conf = HBaseConfiguration.create();
conf.addResource("core-site.xml");
conf.addResource("hbase-site.xml");
Connection conn = ConnectionFactory.createConnection();
Admin admin = conn.getAdmin();
Table table = conn.getTable(TableName.valueOf("namesp1:student"));
Scan scan = new Scan();
ResultScanner results = table.getScanner(scan);
for(Result result : results){
System.out.println(Bytes.toString(result.getRow())+"===>");
System.out.println(result.getValue("f1".getBytes(),"name".getBytes()));
for(Cell cell : result.listCells()) {
System.out.println(Bytes.toString(cell.getValueArray()));
System.out.println("row:"+new String(cell.getRowArray(),"UTF-8"));
System.out.println("fam:"+new String(cell.getFamilyArray(),"UTF-8"));
System.out.println("qua:"+Bytes.toString(cell.getQualifierArray()));
System.out.println("val:"+Bytes.toString(cell.getValueArray()));
System.out.println("----------------------");
}
}
}
}
然后是结果:
lisi===>
null
lisiclasss��:ruangong
row:lisiclasss��:ruangong
fam:lisiclasss��:ruangong
qua:lisiclasss��:ruangong
val:lisiclasss��:ruangong
----------------------
lisiidsT��1002
row:lisiidsT��1002
fam:lisiidsT��1002
qua:lisiidsT��1002
val:lisiidsT��1002
----------------------
lisinamesT�李四
row:lisinamesT�李四
fam:lisinamesT�李四
qua:lisinamesT�李四
val:lisinamesT�李四
----------------------
zhangsan===>
null
zhangsanclasssdΙxinji
row:zhangsanclasssdΙxinji
fam:zhangsanclasssdΙxinji
qua:zhangsanclasssdΙxinji
val:zhangsanclasssdΙxinji
----------------------
zhangsanidsT��1001
row:zhangsanidsT��1001
fam:zhangsanidsT��1001
qua:zhangsanidsT��1001
val:zhangsanidsT��1001
----------------------
zhangsannamesd�Wzhangsan
row:zhangsannamesd�Wzhangsan
fam:zhangsannamesd�Wzhangsan
qua:zhangsannamesd�Wzhangsan
val:zhangsannamesd�Wzhangsan
----------------------
我想扫描整个表的数据,建的表只有列簇,没有再往下分了。
几个问题:
1.我知道可能循环多了一层,但是我研究了好久都不知道results还能点出什么方法来获取数据。
2.result.getValue()里要填什么参数?列簇和列名吗?但是我这个表里只有列簇,再往下没有了,应该怎么办?
3.cell.getRowArray(),cell.getFamilyArray()等拿到等是什么?为什么几个都一样的?
4.乱码
更新:
又折腾了一下,result.getValue()弄明白了,两个参数填列簇名和列名,没有就填null,返回的是一个byte数组,还得用new string转一下才会显示内容。但是这样写就麻烦了,怎么可以简单点就能都循环到?