• hbase异常:java.io.IOException: Unable to determine ZooKeeper ensemble


    项目中用到hbase,有时候可能会报一些异常,比如java.io.IOException: Unable to determine ZooKeeper ensemble 等等,当出现这个问题时,根据个人经验,是由于zookeeper集群地址不可访问导致的,但某某说是项目中用到线程池的问题导致的,咱就看看吧,异常信息如下:

    java.io.IOException: Unable to determine ZooKeeper ensemble
        at org.apache.hadoop.hbase.zookeeper.ZKUtil.connect(ZKUtil.java:120)
        at org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher.<init>(ZooKeeperWatcher.java:165)
        at org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher.<init>(ZooKeeperWatcher.java:134)
        at org.apache.hadoop.hbase.client.ZooKeeperKeepAliveConnection.<init>(ZooKeeperKeepAliveConnection.java:43)
        at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getKeepAliveZooKeeperWatcher(HConnectionManager.java:1710)
        at org.apache.hadoop.hbase.client.ZooKeeperRegistry.isTableOnlineState(ZooKeeperRegistry.java:100)
        at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.isTableDisabled(HConnectionManager.java:879)
        at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.relocateRegion(HConnectionManager.java:1032)
        at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegionInMeta(HConnectionManager.java:1255)
        at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:1059)
        at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:1016)
        at org.apache.hadoop.hbase.client.HTable.finishSetup(HTable.java:326)
        at org.apache.hadoop.hbase.client.HTable.<init>(HTable.java:310)
        at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getTable(HConnectionManager.java:712)
        at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getTable(HConnectionManager.java:694)
        at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getTable(HConnectionManager.java:684)
        .........................
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:957)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:620)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

    查看源码ZooKeeperWatcher类:

     1   public ZooKeeperWatcher(Configuration conf, String identifier,
     2       Abortable abortable, boolean canCreateBaseZNode)
     3   throws IOException, ZooKeeperConnectionException {
     4     this.conf = conf;
     5     // Capture a stack trace now.  Will print it out later if problem so we can
     6     // distingush amongst the myriad ZKWs.
     7     try {
     8       throw new Exception("ZKW CONSTRUCTOR STACK TRACE FOR DEBUGGING");
     9     } catch (Exception e) {
    10       this.constructorCaller = e;
    11     }
    12     this.quorum = ZKConfig.getZKQuorumServersString(conf);
    13     // Identifier will get the sessionid appended later below down when we
    14     // handle the syncconnect event.
    15     this.identifier = identifier;
    16     this.abortable = abortable;
    17     setNodeNames(conf);
    18     this.recoverableZooKeeper = ZKUtil.connect(conf, quorum, this, identifier);
    19     if (canCreateBaseZNode) {
    20       createBaseZNodes();
    21     }
    22   }

    从源码中可得知,zookeeper地址存在问题,然后在看看ZKConfig类的方法:

     1  public static String getZKQuorumServersString(Properties properties) {
     2     String clientPort = null;
     3     List<String> servers = new ArrayList<String>();
     4 
     5     // The clientPort option may come after the server.X hosts, so we need to
     6     // grab everything and then create the final host:port comma separated list.
     7     boolean anyValid = false;
     8     for (Entry<Object,Object> property : properties.entrySet()) {
     9       String key = property.getKey().toString().trim();
    10       String value = property.getValue().toString().trim();
    11       if (key.equals("clientPort")) {
    12         clientPort = value;
    13       }
    14       else if (key.startsWith("server.")) {
    15         String host = value.substring(0, value.indexOf(':'));
    16         servers.add(host);
    17         try {
    18           //noinspection ResultOfMethodCallIgnored
    19           InetAddress.getByName(host);
    20           anyValid = true;
    21         } catch (UnknownHostException e) {
    22           LOG.warn(StringUtils.stringifyException(e));
    23         }
    24       }
    25     }
    26 
    27     if (!anyValid) {
    28       LOG.error("no valid quorum servers found in " + HConstants.ZOOKEEPER_CONFIG_NAME);
    29       return null;
    30     }
    31 
    32     if (clientPort == null) {
    33       LOG.error("no clientPort found in " + HConstants.ZOOKEEPER_CONFIG_NAME);
    34       return null;
    35     }
    36 
    37     if (servers.isEmpty()) {
    38       LOG.fatal("No servers were found in provided ZooKeeper configuration. " +
    39           "HBase must have a ZooKeeper cluster configured for its " +
    40           "operation. Ensure that you've configured '" +
    41           HConstants.ZOOKEEPER_QUORUM + "' properly.");
    42       return null;
    43     }
    44 
    45     StringBuilder hostPortBuilder = new StringBuilder();
    46     for (int i = 0; i < servers.size(); ++i) {
    47       String host = servers.get(i);
    48       if (i > 0) {
    49         hostPortBuilder.append(',');
    50       }
    51       hostPortBuilder.append(host);
    52       hostPortBuilder.append(':');
    53       hostPortBuilder.append(clientPort);
    54     }
    55 
    56     return hostPortBuilder.toString();
    57   }

    以上可以明确确定是ZooKeeper对应的地址不可访问导致出现异常。不是啥线程池的问题,跟程序中用到线程池没半毛钱关系..........

  • 相关阅读:
    No-3.算数运算符
    No-2.注释
    No-1.第一个 Python 程序
    mtcnn网络训练--------------->>>
    sudo vim ~/.condarc
    CVPR2021佳作 | One-Shot都嫌多,Zero-Shot实例样本分割
    查询--主机硬件结构类型
    人群计数:
    共享盘登录
    C++---->>YOLOv4-detect_demo.py参考
  • 原文地址:https://www.cnblogs.com/jessezeng/p/5134456.html
Copyright © 2020-2023  润新知