Hbase java.io.IOException: The connection has to be unmanaged.

新手尝试HBase,练手java API 的简单put get delete 操作。
考虑到 Table 的线程不安全,尝试使用HConnectionManager获取 HConnection,进行一系列CRUD。
中间遇到了一个小问题,记录下,方便以后回顾,也可以帮助其他初学者。
首先用
HConnection hConn = HConnectionManager.getConnection(conf);
HTableInterface hTableInterface = hConn.getTable(tableName);
//tableName 为String
获取了HTableInterface ,执行操作并hTableInterface.flushCommits();
后报出异常 Exception in thread “main” java.io.IOException: The connection has to be unmanaged.
跟踪HConnectionManager源码,查看到

@Override
    public HTableInterface getTable(byte[] tableName, ExecutorService pool) throws IOException {
      if (managed) {
        throw new IOException("The connection has to be unmanaged.");
      }
      return new HTable(tableName, this, pool);
    }

由于managed 是收管理的 抛出IO异常
而这个boolean 类型的在getConnection(conf);阶段就已经被设置成了true

public static HConnection getConnection(Configuration conf)
  throws ZooKeeperConnectionException {
    HConnectionKey connectionKey = new HConnectionKey(conf);
    synchronized (HBASE_INSTANCES) {
      HConnectionImplementation connection = HBASE_INSTANCES.get(connectionKey);
      if (connection == null) {
        connection = new HConnectionImplementation(conf, true, null);
        HBASE_INSTANCES.put(connectionKey, connection);
      } else if (connection.isClosed()) {
        HConnectionManager.deleteConnection(connectionKey, true);
        connection = new HConnectionImplementation(conf, true, null);
        HBASE_INSTANCES.put(connectionKey, connection);
      }
      connection.incCount();
      return connection;
    }
  }

所以我尝试自己 new HConnectionImplementation 但是线程池不确定 所以观望了一会儿
发现Manager类中还有一个createHConnection,源码如下

public static HConnection createConnection(Configuration conf)
  throws ZooKeeperConnectionException {
    return new HConnectionImplementation(conf, false, null);
  }

异常解决。可以不用担心线程是否安全,放心操作HBase 的 CRUD了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HBase是一种分布式的非关系型数据库,它基于Hadoop的HDFS文件系统进行存储,并且提供了高可靠性、高扩展性和高性能的特性。当在使用HBase时,有时可能会遇到一些报错信息。 对于报错信息:java.io.IOException: could not locate executable null\bin\win,这是由于系统环境变量配置不正确导致的。在Windows系统中,HBase需要依赖一些可执行文件来执行不同的操作。然而,这个错误消息告诉我们系统找不到指定位置的可执行文件。 解决这个问题,我们可以按照以下步骤操作: 1. 首先,确认你已经正确安装了HBase并且设置好了系统环境变量。确保HBase的安装目录被正确添加到 PATH 环境变量中。 2. 确保在 HBase 的 conf 目录下,有一个名为 hbase-site.xml 的配置文件。在这个文件中,你需要设置 HBase 的主要配置属性,例如 HBase 的根目录。 3. 确认 Hadoop 的 bin 目录也被正确添加到 PATH 环境变量中。这是因为HBase依赖于Hadoop的一些可执行文件。 4. 确认 Hadoop 的配置文件也存在于其 conf 目录中,并且 Hadoop 的根目录也被正确设置。 5. 最后,尝试重新启动 HBase,看看是否仍然报错。 如果以上步骤都正确进行,并且环境配置也正确,你应该能够避免这个错误。如果问题仍然存在,请仔细检查上述步骤,并确保每一步都按照正确的方式进行操作。 希望以上解答能够帮助你解决HBase链接报错的问题。如果仍然有疑问,请提供更多的详细信息,以便我们能更准确地定位问题并给出进一步的解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值