请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

storm和hbase整合巨坑

我是用hbase集成storm,在spout里面读取hbase的数据,之前用的是
for (Result result : orderRs) {
for (Cell cell : result.rawCells()) {
orderRowkeys = new String(CellUtil.cloneRow(cell));
}
来获取行键进而得到数据。但是在ScannerResult orderRs = orderInfoTable.getScanner(scan);这个地方和 for (Result result : orderRs) {这两个地方在获取到几条数据之后 一直报java.io.InterruptedIOException 就这样一个异常
没有cause by 两个地方轮流报。然后我以为是循环的问题 就用迭代这种方法来获取数据
while(it.hasNext()){
Result result = it.next();
List cells = result.listCells();
for(int i =0;i<cells.size();i++){

可是 在 ScannerResult orderRs = orderInfoTable.getScanner(scan);和
while(it.hasNext)还是轮流报这个错。 有时候在spout里面这两个地方不报了 在后面的bolt里面我也有这样得处理的地方接着报 导致运行不下去。。。。可是 同样的代码 在main方法下面确实可以一直讲数据拿完 苦苦找不到原因

图片描述
这个是不是这两个for循环导致的啊
如果是的话 那又如何才能获取hbase中数据呢

图片描述
图片描述

还有这样

正在回答

2回答

Michael_PK 2019-10-31 17:25:43

这报错就是调用RPC通信时的问题

0 回复 有任何疑惑可以回复我~
Michael_PK 2019-10-31 17:25:09

这个问题需要你自己定位,只能给你思路:你的代码与HBase通信是否有问题

0 回复 有任何疑惑可以回复我~
  • 提问者 慕函数7570418 #1
    我在storm的类内方法外定义了
    private static final String HBASE_ROOT_DIR ="hdfs://hadoop01:9000/hbase";
    Configuration conf;
    Connection connection = null;
    然后在bolt的prepare方法里set.conf
    this.conf = HBaseConfiguration.create();
    conf.set("hbase.rootdir", HBASE_ROOT_DIR);		conf.set("hbase.zookeeper.quorum","hadoop01,hadoop02,hadoop03");
    conf.set("hbase.zookeeper.property.clientPort", "2181");
    然后再在bolt的execute方法里
    ExecutorService pool = Executors.newFixedThreadPool(10);
    this.connection = ConnectionFactory.createConnection(conf,pool);
    不知道这样是不是有问题
    回复 有任何疑惑可以回复我~ 2019-10-31 18:50:49
  • Michael_PK 回复 提问者 慕函数7570418 #2
    去storm的源码的testcase或者example里面找
    回复 有任何疑惑可以回复我~ 2019-10-31 19:03:09
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信