Java调用HBase API卡死的解决方法


假设有4台机,IP及主机名如下:

192.168.100.105 c1
192.168.100.110 c2
192.168.100.115 c3
192.168.100.120 c4

 

调用HBase API的示例代码:

String tableName = "User";
try {
    Configuration conf = HBaseConfiguration.create();
    conf.set("hbase.zookeeper.quorum", "c1:2181,c2:2181,c3:2181,c4:2181");
    Connection conn = ConnectionFactory.createConnection(conf);
    Admin admin = conn.getAdmin();
    TableName tbObj = TableName.valueOf(tableName);
    if (admin.tableExists(tbObj)) {  //debug运行一般会卡在这句
        System.out.println(tableName + "表已存在!");
    } else {
        HTableDescriptor desc = new HTableDescriptor(tbObj);
        admin.createTable(desc);
        System.out.println(tableName + "表创建成功!");
    }
} catch (Exception e) {
    System.out.println(e);
}

 

原因:

ZooKeeper需要使用主机名访问。

* 只能用主机名访问。也就是说,即使把代码中的主机名改成IP,也会卡死,例如:

conf.set("hbase.zookeeper.quorum", "192.168.100.105:2181,192.168.100.110:2181,192.168.100.115:2181,192.168.100.120:2181");

 

解决方法:

在运行代码的主机的hosts文件添加主机名和IP的映射。

 

Linux

vim /etc/hosts

加入以下内容:

192.168.100.105 c1
192.168.100.110 c2
192.168.100.115 c3
192.168.100.120 c4

 

Windows

1.打开C:\Windows\System32\drivers\etc目录

2.右键hosts文件属性,去掉“只读”属性(就是不勾选)

3.安全 -> 编辑 -> User(一般还有括号用户名)

4.在User的权限中,全部勾选为允许。

5.保存(确定 -> 确定 -> 确定)。

6.用记事本打开hosts文件,输入以下内容:

192.168.100.105 c1
192.168.100.110 c2
192.168.100.115 c3
192.168.100.120 c4

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM