心无闸念 2020-07-03 15:23 采纳率: 25%
浏览 304
已结题

java 怎么全表扫描hbase

自己摸索了一下,又看了下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转一下才会显示内容。但是这样写就麻烦了,怎么可以简单点就能都循环到?

  • 写回答

1条回答 默认 最新

  • threenewbee 2020-07-03 17:12
    关注
    评论

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大