springboot+hbase整合遇到的坑

前些日子,搞了一波Hbase数据库的整合,个人感觉hbase 还不错,大概的介绍和理解,网上很多,但是对Hbase分页以及使用sql查询的整合还是比较少的,最后我也没搞成分页,因为服务器不让我动,我想上Phoneix插件,项目负责人不给弄啊!~~~

 

1.报错无权限,在初始化Hbase连接的时候,添加下面的代码,admin 是安装hbase机器的用户名。

org.apache.hadoop.hbase.client.RetriesExhaustedWithDetailsException: Failed 1 action: org.apache.hadoop.hbase.security.AccessDeniedException: Insufficient permissions for user ‘xxxx'

1
2
3
4
5
6
7
/*
                    * 在创建、查询、插入的时候会报错,当前用户没有权限
                    * 添加下面一行代码,把hbase已经存在的用户 存放在代码中
                    * 调用的时候就不会报错
                    * */
                   UserGroupInformation userGroupInformation = UserGroupInformation.createRemoteUser("admin");
                   connection = ConnectionFactory.createConnection(conf, pool, User.create(userGroupInformation));

2.查询的时候添加条件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/**
     *  根据某个列查询
     * @param   tablename 表名
     * @param   columnFamily 列族
     * @param   vehicleId 列名
     * @param   vehplatecolorid 列名
     * @param    startDate    开始时间
     *@param    startDate    结束时间
     * */
    public static String selectByParam(String tablename, String columnFamily, String vehicleId, String param1,
                                       String vehplatecolorid,String param2,Long startDate,Long endDate ) throws Exception {
 
        //过滤器
        Filter filter1 = new SingleColumnValueFilter(Bytes.toBytes(columnFamily), Bytes.toBytes(vehicleId),
                CompareFilter.CompareOp.EQUAL, Bytes.toBytes(param1));
 
        Filter filter2 = new SingleColumnValueFilter(Bytes.toBytes(columnFamily), Bytes.toBytes(vehplatecolorid),
                CompareFilter.CompareOp.EQUAL, Bytes.toBytes(param2));
 
        /*Filter filter3 = new SingleColumnValueFilter(Bytes.toBytes(columnFamily), Bytes.toBytes(startDate),
                CompareFilter.CompareOp.LESS_OR_EQUAL , Bytes.toBytes(startDate));
 
        Filter filter4 = new SingleColumnValueFilter(Bytes.toBytes(columnFamily), Bytes.toBytes(endDate),
                CompareFilter.CompareOp. GREATER_OR_EQUAL, Bytes.toBytes(endDate));*/
 
        FilterList filterList = new FilterList();
        filterList.addFilter(filter1);
        filterList.addFilter(filter2);
        /*filterList.addFilter(filter3);
        filterList.addFilter(filter4);*/
        Table table = connection.getTable(TableName.valueOf(tablename));
        Scan s = new Scan();
        if(startDate!=null && endDate !=null){
            //时间戳筛选
            s.setTimeRange(startDate,endDate);
        }
 
        s.setFilter(filterList);
        ResultScanner rs = table.getScanner(s);
 
        List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>();
 
        //此处双for循环 需要优化,但没找到其他 读取数据的方式^-^ 只能双循环读取啊  <'_'>   .....
        for (Result r : rs) {
            Map map=new HashMap();
            for (KeyValue keyValue : r.raw()) {
                map.put(new String(keyValue.getQualifier()),new String(keyValue.getValue()));
            }
            if(map.get("passId")!=null && map.get("vehicleId")!=null){
                resList.add(map);
            }
        }
 
        return JSON.toString(resList);
    }

  

posted @   幽灵中的野孩子  阅读(1297)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示