我已经在伪分布式模式下设置了一个带有hadoop和hbase的节点,当然还安装了zookeeper和regionserver。
一切运行顺利但是当通过Java Client API连接到hbase时,我遇到了异常。
我试了好几个小时来解决这个问题,但我无法做到。 我可以telnet到remotemachine:60000,所以这不是端口防火墙问题。 日志也不会报告任何特殊内容。
(注意日志debianhdfs正确设置为主机文件中的IP)
12/05/06 19:47:27 INFO zookeeper.ClientCnxn:打开套接字连接 到服务器debianhdfs / 192.168.137.135:2181 12/05/06 19:47:27 INFO zookeeper.ClientCnxn:建立套接字连接 debianhdfs / 192.168.137.135:2181,发起会议12/05/06 19:47:27 INFO zookeeper.ClientCnxn:在服务器上完成会话建立 debianhdfs / 192.168.137.135:2181,sessionid = 0x13721c707ff002f, negotiated timeout = 40000 12/05/06 19:47:28 INFO client.HConnectionManager $ HConnectionImplementation:getMaster尝试 0 of 1失败;不再重试了。 java.net.ConnectException:连接 拒绝:没有进一步的信息 sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)at sun.nio.ch.SocketChannelImpl.finishConnect(未知来源)at org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:206) 在org.apache.hadoop.net.NetUtils.connect(NetUtils.java:408)at org.apache.hadoop.hbase.ipc.HBaseClient $ Connection.setupIOstreams(HBaseClient.java:328) 在 org.apache.hadoop.hbase.ipc.HBaseClient.getConnection(HBaseClient.java:883) 在org.apache.hadoop.hbase.ipc.HBaseClient.call(HBaseClient.java:750) 在 org.apache.hadoop.hbase.ipc.HBaseRPC $ Invoker.invoke(HBaseRPC.java:257) 在$ Proxy4.getProtocolVersion(未知来源)at org.apache.hadoop.hbase.ipc.HBaseRPC.getProxy(HBaseRPC.java:419)at org.apache.hadoop.hbase.ipc.HBaseRPC.getProxy(HBaseRPC.java:393)at org.apache.hadoop.hbase.ipc.HBaseRPC.getProxy(HBaseRPC.java:444)at at org.apache.hadoop.hbase.client.HConnectionManager $ HConnectionImplementation.getMaster(HConnectionManager.java:567) 在 org.apache.hadoop.hbase.client.HBaseAdmin。(HBaseAdmin.java:95) 在 org.apache.hadoop.hbase.client.HBaseAdmin.checkHBaseAvailable(HBaseAdmin.java:1296) 在Main.main(Main.java:57)线程“main”中的异常 org.apache.hadoop.hbase.MasterNotRunningException:debianhdfs:60000 在 org.apache.hadoop.hbase.client.HConnectionManager $ HConnectionImplementation.getMaster(HConnectionManager.java:603) 在 org.apache.hadoop.hbase.client.HBaseAdmin。(HBaseAdmin.java:95) 在 org.apache.hadoop.hbase.client.HBaseAdmin.checkHBaseAvailable(HBaseAdmin.java:1296) 在Main.main(Main.java:57)
在独立模式下,非伪分布式I使用相同的代码获得以下异常:
12/05/06 20:32:49 INFO zookeeper.ClientCnxn:打开套接字连接 到服务器debianhdfs / 192.168.137.135:2181 12/05/06 20:32:49信息 zookeeper.ClientCnxn:建立套接字连接 debianhdfs / 192.168.137.135:2181,发起会议12/05/06 20:32:49 INFO zookeeper.ClientCnxn:在服务器上完成会话建立 debianhdfs / 192.168.137.135:2181,sessionid = 0x1372210f8fe0004, negotiated timeout = 40000 12/05/06 20:32:49 INFO client.HConnectionManager $ HConnectionImplementation:ZooKeeper 可用,但没有找到有效的主要位置12/05/06 20:32:49信息 client.HConnectionManager $ HConnectionImplementation:getMaster尝试 0 of 1失败;不再重试了。 org.apache.hadoop.hbase.MasterNotRunningException at org.apache.hadoop.hbase.client.HConnectionManager $ HConnectionImplementation.getMaster(HConnectionManager.java:564) 在 org.apache.hadoop.hbase.client.HBaseAdmin。(HBaseAdmin.java:95) 在 org.apache.hadoop.hbase.client.HBaseAdmin.checkHBaseAvailable(HBaseAdmin.java:1296) 在Main.main(Main.java:57)线程“main”中的异常 org.apache.hadoop.hbase.MasterNotRunningException at org.apache.hadoop.hbase.client.HConnectionManager $ HConnectionImplementation.getMaster(HConnectionManager.java:601) 在 org.apache.hadoop.hbase.client.HBaseAdmin。(HBaseAdmin.java:95) 在 org.apache.hadoop.hbase.client.HBaseAdmin.checkHBaseAvailable(HBaseAdmin.java:1296) 在Main.main(Main.java:57)
Configuration config = HBaseConfiguration.create();
config.set("hbase.zookeeper.quorum", "debianhdfs");
config.set("hbase.zookeeper.property.clientPort","2181");
HBaseAdmin.checkHBaseAvailable(config);
Configuration config = HBaseConfiguration.create();
config.set("hbase.zookeeper.quorum", "debianhdfs");
config.set("hbase.zookeeper.property.clientPort","2181");
HBaseAdmin.checkHBaseAvailable(config);
答案 0 :(得分:1)
由于您是独立运行的,为什么不尝试首先使用与HBase一起运行的zookeeper?由于HBase在独立模式下管理自己的本地动物园管理员,因此使用它可能会减少遇到错误的机会,并且由于您需要管理的程序较少,因此您可以更轻松地解决问题。
要让HBase运行自己的ZK实例,请前往${HBASE_HOME}/conf/hbase-env.sh
,一直滚动到底部并确保有一行export HBASE_MANAGES_ZK=true
,或者该行被注释掉(因为默认情况下) HBase管理自己的ZK)