无法使Java客户端连接到远程计算机中的Standlone HBase设置

时间:2016-01-05 13:23:55

标签: java hadoop hbase

我正在使用HBase.1.1.2版本。我能够从Hbase Shell和Hbase REST API做一切。我有一个带Ubuntu的VMWare,其中Hadoop& Hbase已经配置,我正在从我的Windows机器上执行Java程序。

注意: - 我没有安装单独的zookeeper我正在使用Hbase内置的zookeeper。

JPS输出: -

3824 SecondaryNameNode
4194 NodeManager
7154 HMaster
9092 Jps
3300 NameNode
3510 DataNode
3975 ResourceManager

下面是我的Hbase-site.xml: -

<configuration>
     <property>
      <name>hbase.rootdir</name>
      <value>hdfs://XX.XX.XX.XX:9000/hbase</value>
   </property>

   //Here you have to set the path where you want HBase to store its built in zookeeper  files.
   <property>
      <name>hbase.zookeeper.property.dataDir</name>
      <value>/home/prag/Desktop/hadoop_data/zookeeper</value>
   </property>  

<property>
  <name>hbase.cluster.distributed</name>
  <value>true</value>
</property> 

</configuration>

* XX.XX.XX.XX是我的ubuntu vm的IP地址,我的hbase已安装,我可以从windows ping。

以下是我的Java代码: -

    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.hbase.HBaseConfiguration;
    import org.apache.hadoop.hbase.client.HBaseAdmin;

    public class HBaseConnection {

        public HBaseConnection() {

        }

        public static void main(String[] args){
            try{
                Configuration config=HBaseConfiguration.create();

                HBaseAdmin.checkHBaseAvailable(config);
                config.set("hbase.zookeeper.quorum", "00.00.00.00");

            }catch(Exception e){
                e.printStackTrace();
            }
        }

    }

以下是我从java程序中获得的异常: -

 org.apache.hadoop.hbase.ZooKeeperConnectionException: Can't connect to ZooKeeper
        at org.apache.hadoop.hbase.client.HBaseAdmin.checkHBaseAvailable(HBaseAdmin.java:2813)
        at com.sag.hbase.HBaseConnection.main(HBaseConnection.java:17)
    Caused by: org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /hbase
        at org.apache.zookeeper.KeeperException.create(KeeperException.java:99)
        at org.apache.zookeeper.KeeperException.create(KeeperException.java:51)
        at org.apache.zookeeper.ZooKeeper.exists(ZooKeeper.java:1045)
        at org.apache.zookeeper.ZooKeeper.exists(ZooKeeper.java:1073)
        at org.apache.hadoop.hbase.client.HBaseAdmin.checkHBaseAvailable(HBaseAdmin.java:2806)
        ... 1 more

2 个答案:

答案 0 :(得分:1)

为了从客户端连接到HBase,客户端还需要知道ZooKeeper仲裁的运行位置。这与ZooKeeper连接信息相同。 ZooKeeper默认使用端口2181,因此在您的配置中,仲裁配置应设置为XX.XX.XX.XX:2181

config.set(HConstants.ZOOKEEPER_QUORUM, "XX.XX.XX.XX:2181");

用XX替换为真正的IP地址。您可以使用HBase zkclki command来验证设置。您还需要在调用checkHBaseAvailable之前移动此行

答案 1 :(得分:0)

只是为了帮助别人我想回答我的问题。这个问题的解决方案是你不应该在你的主机文件中输入localhost。