【HBase】- HBase扫描表时报错 org.apache.hadoop.hbase.DoNotRetryIOException: hconnection-0x233fe9b6 closed

描述

for (String attendUid : attendUids) {
            // 范围 uid_   => uid_************ =>    uid|
            // 范围的获取是根据unicode码来判断  uid_ 小于 所有 uid_*  而 | 的unicode码比 _ 大 所以大于所有的 uid_....
            Scan scan = new Scan(Bytes.toBytes(attendUid +"_"), Bytes.toBytes(attendUid+"|"));
            ResultScanner results = contentTable.getScanner(scan);
            // 一个 Result 对应的是 一个 rowkey 的信息
            for (Result result : results) {
                // 获取rowkey
                byte[] rowKey = result.getRow();
                // 获取对应的时间戳
                long ts = Long.parseLong(Bytes.toString(rowKey).split("_")[1]);
                // 封装信息
                // 列族 , 接收微博内容的粉丝的uid, 发送的时间戳, 微博内容的uid
                inboxPut.addColumn(Bytes.toBytes("info"),Bytes.toBytes(attendUid),ts,rowKey);
            }
            inboxTable.put(inboxPut);

            // 释放连接
            contentTable.close();
            relationsTable.close();
            inboxTable.close();
            connection.close();
        }

我需要扫描指定范围的rowkey , 在执行以上代码的时候报错 然后我看了抛出这个异常的原因 :
在这里插入图片描述
当扫描表时连接断开的时候,则会报这个错 , 我百思不得其解 , 不晓得为什么它会突然断开,然后就 debug.
因为我要扫描 1002 和 1003 这个两个 rowkey范围的数据
rowkey是 1002_时间戳拼接的 , 然后发现 1002可以扫描到 , 但是 1003 不行 ?
我以为是 1003 的数据不在表中所以才会出现这个问题 , 然后 发现不是, 我在 HBase shell 中可以正常查询 , 我一直以为是 Scan 那个部分代码的问题 , 也没往下翻 , 然后我就顺手翻了下,然后我就想打自己两巴掌 , 我把关闭连接的代码写 for 循环里面了 … 可以看到上面的代码 …

然后 把 关闭连接的代码拿出来就可以了 …

如果你遇到和我一样的问题 , 可以看看自己是不是提前关掉了连接了,或者在某个地方HBase连接就关闭了, 仔细检查下, 这个报错是因为HBase连接已经关了,但是仍然还在调Table对象或者相关对象的表引起的 , 写代码一定要认真…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兀坐晴窗独饮茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值