连接并坚持使用HBase

我只是尝试使用java客户端连接到hbase,它是cloudera-vm的一部分。

(192.168.56.102是vm的inet ip)

我使用虚拟盒与主机网络设置。

所以我可以访问hbase master的webUI @ http://192.168.56.102:60010/master.jsp

我的java客户端(在vm本身运行良好)也建立了与192.168.56.102:2181的连接

但是当它调用getMaster我得到连接被拒绝时看到log:

11/09/14 11:19:30 INFO zookeeper.ZooKeeper: Initiating client connection, connectString=192.168.56.102:2181 sessionTimeout=180000 watcher=hconnection 11/09/14 11:19:30 INFO zookeeper.ClientCnxn: Opening socket connection to server /192.168.56.102:2181 11/09/14 11:19:30 INFO zookeeper.ClientCnxn: Socket connection established to cloudera-vm/192.168.56.102:2181, initiating session 11/09/14 11:19:30 INFO zookeeper.ClientCnxn: Session establishment complete on server cloudera-vm/192.168.56.102:2181, sessionid = 0x13267157f930009, negotiated timeout = 40000 11/09/14 11:19:32 INFO client.HConnectionManager$HConnectionImplementation: getMaster attempt 0 of 10 failed; retrying after sleep of 1000 java.net.ConnectException: Connection refused: no further information at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:567) at org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:206) at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:404) at org.apache.hadoop.hbase.ipc.HBaseClient$Connection.setupIOstreams(HBaseClient.java:311) at org.apache.hadoop.hbase.ipc.HBaseClient.getConnection(HBaseClient.java:865) at org.apache.hadoop.hbase.ipc.HBaseClient.call(HBaseClient.java:732) at org.apache.hadoop.hbase.ipc.HBaseRPC$Invoker.invoke(HBaseRPC.java:257) at $Proxy9.getProtocolVersion(Unknown Source) 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 org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getMaster(HConnectionManager.java:358) at org.apache.hadoop.hbase.client.HBaseAdmin.(HBaseAdmin.java:90) at org.datanucleus.store.hbase.HBaseUtils$1.run(HBaseUtils.java:432) at java.security.AccessController.doPrivileged(Native Method) at org.datanucleus.store.hbase.HBaseUtils.createSchemaForClass(HBaseUtils.java:428) at org.datanucleus.store.hbase.HBaseMetaDataListener.loaded(HBaseMetaDataListener.java:74) at org.datanucleus.store.hbase.HBaseStoreManager.(HBaseStoreManager.java:76) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at org.datanucleus.plugin.NonManagedPluginRegistry.createExecutableExtension(NonManagedPluginRegistry.java:677) at org.datanucleus.plugin.PluginManager.createExecutableExtension(PluginManager.java:287) at org.datanucleus.NucleusContext.createStoreManagerForProperties(NucleusContext.java:453) at org.datanucleus.NucleusContext.initialise(NucleusContext.java:264) at org.datanucleus.api.jpa.JPAEntityManagerFactory.initialiseNucleusContext(JPAEntityManagerFactory.java:746) at org.datanucleus.api.jpa.JPAEntityManagerFactory.(JPAEntityManagerFactory.java:422) at org.datanucleus.api.jpa.PersistenceProviderImpl.createEntityManagerFactory(PersistenceProviderImpl.java:91) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:150) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:70) at de.syrtec.jpa2hbase.start.TestDAO.main(TestDAO.java:13) 

HBase的-site.xml中:

   hbase.zookeeper.quorum 192.168.56.102   hbase.zookeeper.property.clientPort 2181   hbase.master 192.168.56.102:60010   

persistence.xml中:

              

TestDAO.java:

 public class TestDAO { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hbase-addressbook"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = null; Account a2 = new Account("myPre3", "mySur3", 2, new Login("e", "f")); tx = em.getTransaction(); tx.begin(); em.persist(a2); tx.commit(); } } 

只是增加了在VM上运行的网络服务(netstat -ntpl):

 tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 563/sshd tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 909/cupsd tcp 0 0 0.0.0.0:8088 0.0.0.0:* LISTEN 2004/python2.6 tcp 0 0 127.0.0.1:8001 0.0.0.0:* LISTEN 2345/python2.6 tcp6 0 0 :::39087 :::* LISTEN 1327/java tcp6 0 0 :::54162 :::* LISTEN 1411/java tcp6 0 0 127.0.0.1:8020 :::* LISTEN 1411/java tcp6 0 0 127.0.0.1:8021 :::* LISTEN 1327/java tcp6 0 0 :::50070 :::* LISTEN 1411/java tcp6 0 0 :::22 :::* LISTEN 563/sshd tcp6 0 0 ::1:631 :::* LISTEN 909/cupsd tcp6 0 0 :::11000 :::* LISTEN 2077/java tcp6 0 0 :::43738 :::* LISTEN 858/java tcp6 0 0 :::50010 :::* LISTEN 858/java tcp6 0 0 :::51258 :::* LISTEN 858/java tcp6 0 0 :::50075 :::* LISTEN 858/java tcp6 0 0 :::60030 :::* LISTEN 1726/java tcp6 0 0 127.0.0.1:44446 :::* LISTEN 1642/java tcp6 0 0 127.0.1.1:41246 :::* LISTEN 1726/java tcp6 0 0 :::8002 :::* LISTEN 2009/java tcp6 0 0 :::8003 :::* LISTEN 2009/java tcp6 0 0 127.0.1.1:58915 :::* LISTEN 1726/java tcp6 0 0 :::59203 :::* LISTEN 1491/java tcp6 0 0 :::50020 :::* LISTEN 858/java tcp6 0 0 127.0.0.1:8005 :::* LISTEN 2077/java tcp6 0 0 :::2181 :::* LISTEN 1726/java tcp6 0 0 :::9290 :::* LISTEN 1327/java tcp6 0 0 :::60010 :::* LISTEN 1726/java tcp6 0 0 :::50090 :::* LISTEN 1491/java tcp6 0 0 :::10090 :::* LISTEN 1411/java tcp6 0 0 :::50060 :::* LISTEN 1642/java tcp6 0 0 :::50030 :::* LISTEN 1327/java 

在经历了许多繁琐的研究之后,我可以提供一个解决方案……可以让其他人免于很多麻烦。

问题的根源是Ubuntu的IPV6支持(我在这里使用)。 但仅仅在网络管理中停用IPV6是不够的。

相反,您必须将以下内容附加到文件:/etc/sysctl.conf

 #disable ipv6 net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1 

重新启动后,您应该通过以下方式validationIPV6是否真的关闭:

 cat /proc/sys/net/ipv6/conf/all/disable_ipv6 

(0 = IPV6开; 1 = IPV6关)

非常感谢

http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-single-node-cluster/#disabling-ipv6

这给了我关键的暗示。