无法规范化地址 localhost/<unresolved>:2222 因为它不可解析

Posted

技术标签:

【中文标题】无法规范化地址 localhost/<unresolved>:2222 因为它不可解析【英文标题】:Unable to canonicalize address localhost/<unresolved>:2222 because it's not resolvable 【发布时间】:2021-07-03 15:06:40 【问题描述】:

我想将 Java 与 Hbase 连接,但出现错误: java.lang.IllegalArgumentException:无法规范化地址

localhost/<unresolved>:2222 because it's not resolvable
    at org.apache.zookeeper.SaslServerPrincipal.getServerPrincipal(SaslServerPrincipal.java:65)
    at org.apache.zookeeper.SaslServerPrincipal.getServerPrincipal(SaslServerPrincipal.java:41)
    at org.apache.zookeeper.ClientCnxn$SendThread.startConnect(ClientCnxn.java:1001)
    at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1060)

这是我的代码:

    Configuration conf = HBaseConfiguration.create();
    conf.set("hbase.zookeeper.quorum", "localhost");
    conf.set("hbase.rootdir", "hdfs://localhost:9000/hbase");
    conf.set("hbase.cluster.distributed", "hbase.cluster.distributed");
    conf.set("hbase.zookeeper.property.clientPort", "2222");
    conf.set("hbase.zookeeper.property.dataDir", "/home/trannguyenhan/app/hbase-2.4.2/zookeeper");
    conf.set("dfs.replication", "1");
    
    HTable htable = new HTable(conf, "demo");
    
    Put p = new Put(Bytes.toBytes("row1"));
    p.add(Bytes.toBytes("demo_column"), Bytes.toBytes("name"), Bytes.toBytes("Nguyen Quang Huy"));
    
    htable.put(p);
    htable.close();

我的配置与文件 hbase-site.xml 中的配置相同。 你能帮我吗,谢谢。

【问题讨论】:

【参考方案1】:

确保 zookeeper 在端口 2222 上运行,因为 Zookeeper 客户端默认端口是 2181。

远程登录本地主机 2222

要让 HBase 在绑定到端口 2222(默认为 2181)的节点上管理 ZooKeeper 仲裁,请确保 HBASE_MANAGE_ZKconf/hbase-env.sh 中被注释掉或设置为 true,然后编辑 conf/hbase-site.xml 并设置 hbase.zookeeper.property.clientPorthbase.zookeeper.quorum.

hbase-site.xml 示例

<property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
  </property>
  <property>
    <name>hbase.tmp.dir</name>
    <value>./tmp</value>
  </property>
  <property>
    <name>hbase.rootdir</name>
    <value>hdfs://server1:9000/hbase</value>
  </property>
  <property>
    <name>hbase.zookeeper.quorum</name>
    <value>zkserver1,zkserver2,zkserver3</value>
  </property>
  <property>
      <name>hbase.zookeeper.property.clientPort</name>
      <value>2222</value>
  </property>

您还必须将hbase.cluster.distributed 设置为true 而不是hbase.cluster.distributed。 改变

    conf.set("hbase.cluster.distributed", "hbase.cluster.distributed");

conf.set("hbase.cluster.distributed", "true");

【讨论】:

以上是关于无法规范化地址 localhost/<unresolved>:2222 因为它不可解析的主要内容,如果未能解决你的问题,请参考以下文章

UOJ UNR #1火车管理 可持久化线段树

uoj#213. UNR #1争夺圣杯

uoj#386. UNR #3鸽子固定器(乱搞)

[UOJ UNR#2 UOJ拯救计划]

UOJ309 UNR #2 排兵布阵

uoj#218. UNR #1火车管理