微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我想将 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 中的配置相同。 能帮帮我吗,谢谢。

解决方法

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

telnet 本地主机 2222

要让 HBase 管理节点上的 ZooKeeper 仲裁,绑定到端口 2222(默认为 2181),请确保 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 NOT hbase.cluster.distributed。 改变

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。