我正在使用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
答案 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。