集群外访问Hbase – access Hbase use a java client program
2011-05-25 22:38
573 查看
集群外访问Hbase – access Hbase use a java
client program
集群环境:
Master -
10.123.122.151 test-Master
Slave -
10.123.122.163 test-DATA01
10.123.122.162 test-DATA02
10.123.122.156 test-DATA03
(zookeeper)
由于需要以client方式访问hbase读写数据, 在原有环境hadoop-0.20.2+737 (cdh3) + hbase-0.89.20100924+28 + jdk-6u20 下总是不能成功连接,典型的错误如下:
Session establishment complete 但是无法继续下去(log4j
调整到 debug模式可以看到详细的日志信息)
[INFO] Initiating client connection, connectString=Test-DATA03:2181 sessionTimeout=60000 watcher=org.apache.hadoop.hbase.zookeeper.ZooKeeperWrapper@423e5d1
[DEBUG] zookeeper.disableAutoWatchReset is false
[DEBUG] <Test-DATA03:/hbase,org.apache.hadoop.hbase.client.HConnectionManager>Connected to zookeeper again
[INFO] Opening socket connection to server Test-DATA03/10.123.122.156:2181
[INFO] Socket connection established to Test-DATA03/10.123.122.156:2181, initiating session
[DEBUG] Session establishment request sent on Test-DATA03/10.123.122.156:2181
[INFO] Session establishment complete on server Test-DATA03/10.123.122.156:2181, sessionid = 0x1300c46dd880ba6, negotiated timeout = 60000
[DEBUG] Reading reply sessionid:0x1300c46dd880ba6, packet:: clientPath:null serverPath:null finished:false header:: 1,4 replyHeader:: 1,52581,0 request:: '/hbase/master,F response:: #31302e3132332e3132322e3135313a3630303030,s{46590,46590,1305876059993,1305876059993,0,0,0,85581891423961088,20,0,46590}
[DEBUG] <Test-DATA03:/hbase,org.apache.hadoop.hbase.client.HConnectionManager>Read ZNode /hbase/master got 10.123.122.151:60000
java.lang.NoSuchMethodError: org.apache.hadoop.security.UserGroupInformation.getCurrentUser()Lorg/apache/hadoop/security/UserGroupInformation;
at org.apache.hadoop.hbase.ipc.HBaseRPC.getProxy(HBaseRPC.java:387)
at org.apache.hadoop.hbase.ipc.HBaseRPC.getProxy(HBaseRPC.java:435)
at org.apache.hadoop.hbase.client.HConnectionManager$TableServers.getMaster(HConnectionManager.java:383)
at org.apache.hadoop.hbase.client.HBaseAdmin.<init>(HBaseAdmin.java:78)
at com.run.puff.utils.HTableFactory.init(HTableFactory.java:38)
at com.run.puff.control.Bootstrap.start(Bootstrap.java:293)
at com.run.puff.control.Bootstrap.main(Bootstrap.java:449)
[DEBUG] Closing session: 0x1300c46dd880ba6
[DEBUG] Closing client for session: 0x1300c46dd880ba6
[DEBUG] Reading reply sessionid:0x1300c46dd880ba6, packet:: clientPath:null serverPath:null finished:false header:: 2,-11 replyHeader:: 2,52582,0 request:: null response:: null
[DEBUG] Disconnecting client for session: 0x1300c46dd880ba6
2011-05-20 16:45:40,941 INFO [org.apache.zookeeper.ClientCnxn] - Opening socket connection to server Test-DATA03/10.123.122.156:2181
2011-05-20 16:45:40,943 DEBUG [org.apache.hadoop.hbase.zookeeper.ZooKeeperWrapper] - <Test-DATA03:/hbase,org.apache.hadoop.hbase.client.HConnectionManager>Trying to read /hbase/root-region-server
2011-05-20 16:45:40,965 INFO [org.apache.zookeeper.ClientCnxn] - Socket connection established to Test-DATA03/10.123.122.156:2181, initiating session
2011-05-20 16:45:40,970 DEBUG [org.apache.zookeeper.ClientCnxn] - Session establishment request sent on Test-DATA03/10.123.122.156:2181
2011-05-20 16:45:40,978 INFO [org.apache.zookeeper.ClientCnxn] - Session establishment complete on server Test-DATA03/10.123.122.156:2181, sessionid = 0x1300c46dd880da6, negotiated timeout = 60000
2011-05-20 16:45:40,988 DEBUG [org.apache.zookeeper.ClientCnxn] - Reading reply sessionid:0x1300c46dd880da6, packet:: clientPath:null serverPath:null finished:false header:: 1,4 replyHeader:: 1,53606,0 request:: '/hbase/root-region-server,F response:: #31302e3132332e3132322e3135363a3630303230,s{11,46598,1305789309818,1305876061548,4,0,0,0,20,0,11}
2011-05-20 16:45:40,988 DEBUG [org.apache.hadoop.hbase.zookeeper.ZooKeeperWrapper] - <Test-DATA03:/hbase,org.apache.hadoop.hbase.client.HConnectionManager>Read ZNode /hbase/root-region-server got 10.123.122.156:60020
2011-05-20 16:45:41,045 DEBUG [org.apache.hadoop.ipc.HBaseClient] - The ping interval is60000ms.
2011-05-20 16:45:41,079 DEBUG [org.apache.hadoop.ipc.HBaseClient] - Connecting to /10.123.122.156:60020
2011-05-20 16:45:41,104 DEBUG [org.apache.hadoop.ipc.HBaseClient] - IPC Client (47) connection to /10.123.122.156:60020 from an unknown user sending #0
2011-05-20 16:45:41,104 DEBUG [org.apache.hadoop.ipc.HBaseClient] - IPC Client (47) connection to /10.123.122.156:60020 from an unknown user: starting, having connections 1
2011-05-20 16:45:41,170 DEBUG [org.apache.hadoop.ipc.HBaseClient] - closing ipc connection to /10.123.122.156:60020: null
java.io.EOFException
at java.io.DataInputStream.readInt(DataInputStream.java:375)
at org.apache.hadoop.hbase.ipc.HBaseClient$Connection.receiveResponse(HBaseClient.java:514)
at org.apache.hadoop.hbase.ipc.HBaseClient$Connection.run(HBaseClient.java:454)
解决这个问题,最终通过升级集群中的hbase版本解决,使用的是apache官方版本
hbase-0.90.1.tar.gz,升级完毕启动hbase时开始报错
org.apache.hadoop.ipc.RPC$VersionMismatch
$ start-hbase.sh
Test-DATA03: starting zookeeper, logging to /opt/hbase/bin/../logs/hbase-hadoop-zookeeper-TEST-DATA03.out
starting master, logging to /opt/hbase/logs/hbase-hadoop-master-CUC-test-FD-WEB.out
Test-DATA03: starting regionserver, logging to /opt/hbase/bin/../logs/hbase-hadoop-regionserver-TEST-DATA03.out
Test-DATA02: starting regionserver, logging to /opt/hbase/bin/../logs/hbase-hadoop-regionserver-TEST-DATA02.out
Test-DATA01: starting regionserver, logging to /opt/hbase/bin/../logs/hbase-hadoop-regionserver-TEST-DATA01.out
Test-DATA03: Exception in thread "main" org.apache.hadoop.ipc.RPC$VersionMismatch: Protocol org.apache.hadoop.hdfs.protocol.ClientProtocol version mismatch. (client = 63, server = 61)
Test-DATA03: at org.apache.hadoop.ipc.RPC.getProxy(RPC.java:403)
Test-DATA03: at org.apache.hadoop.ipc.RPC.getProxy(RPC.java:384)
Test-DATA03: at org.apache.hadoop.hdfs.DFSClient.createRPCNamenode(DFSClient.java:111)
Test-DATA03: at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:213)
Test-DATA03: at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:180)
Test-DATA03: at org.apache.hadoop.hdfs.DistributedFileSystem.initialize(DistributedFileSystem.java:89)
Test-DATA03: at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:1514)
Test-DATA03: at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:67)
Test-DATA03: at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:1548)
然后通过简单的处理方式,将hadoop-core-0.20.2+737.jar
拷贝至hbase安装目录的lib下问题即解,此问题应该是由于升级的hbase为apache官方版本,其中包含的hadoop-0.20.2-core.jar
与hadoop-cdh3 的 hadoop-core-0.20.2+737.jar
存在差异
再次重启hbase,一切顺利
如下连接代码终于可以正常工作了
hbaseConf = HBaseConfiguration.create();
hbaseConf.set("hbase.master.port", "test-Master:54310");
hbaseConf.set("hbase.zookeeper.quorum", "test-DATA03");
hbaseConf.set("hbase.zookeeper.property.clientPort","2181");
HBaseAdmin
admin = new HBaseAdmin(hbaseConf);
附注:对于
java.lang.NoSuchMethodError: org.apache.hadoop.security.UserGroupInformation.getCurrentUser()Lorg/apache/hadoop/security/UserGroupInformation;
这个异常,在apache 官网上找到了相关该bug的相关信息,
https://issues.......apache.org/jira/browse/HADOOP-7101
HADOOP-7101
UserGroupInformation.getCurrentUser()
fails when called from non-Hadoop JAAS context
代码修改日志:
https://issues.apache.org/jira/secure/attachment/12468097/hadoop-7101.txt
client program
集群环境:
Master -
10.123.122.151 test-Master
Slave -
10.123.122.163 test-DATA01
10.123.122.162 test-DATA02
10.123.122.156 test-DATA03
(zookeeper)
由于需要以client方式访问hbase读写数据, 在原有环境hadoop-0.20.2+737 (cdh3) + hbase-0.89.20100924+28 + jdk-6u20 下总是不能成功连接,典型的错误如下:
Session establishment complete 但是无法继续下去(log4j
调整到 debug模式可以看到详细的日志信息)
[INFO] Initiating client connection, connectString=Test-DATA03:2181 sessionTimeout=60000 watcher=org.apache.hadoop.hbase.zookeeper.ZooKeeperWrapper@423e5d1
[DEBUG] zookeeper.disableAutoWatchReset is false
[DEBUG] <Test-DATA03:/hbase,org.apache.hadoop.hbase.client.HConnectionManager>Connected to zookeeper again
[INFO] Opening socket connection to server Test-DATA03/10.123.122.156:2181
[INFO] Socket connection established to Test-DATA03/10.123.122.156:2181, initiating session
[DEBUG] Session establishment request sent on Test-DATA03/10.123.122.156:2181
[INFO] Session establishment complete on server Test-DATA03/10.123.122.156:2181, sessionid = 0x1300c46dd880ba6, negotiated timeout = 60000
[DEBUG] Reading reply sessionid:0x1300c46dd880ba6, packet:: clientPath:null serverPath:null finished:false header:: 1,4 replyHeader:: 1,52581,0 request:: '/hbase/master,F response:: #31302e3132332e3132322e3135313a3630303030,s{46590,46590,1305876059993,1305876059993,0,0,0,85581891423961088,20,0,46590}
[DEBUG] <Test-DATA03:/hbase,org.apache.hadoop.hbase.client.HConnectionManager>Read ZNode /hbase/master got 10.123.122.151:60000
java.lang.NoSuchMethodError: org.apache.hadoop.security.UserGroupInformation.getCurrentUser()Lorg/apache/hadoop/security/UserGroupInformation;
at org.apache.hadoop.hbase.ipc.HBaseRPC.getProxy(HBaseRPC.java:387)
at org.apache.hadoop.hbase.ipc.HBaseRPC.getProxy(HBaseRPC.java:435)
at org.apache.hadoop.hbase.client.HConnectionManager$TableServers.getMaster(HConnectionManager.java:383)
at org.apache.hadoop.hbase.client.HBaseAdmin.<init>(HBaseAdmin.java:78)
at com.run.puff.utils.HTableFactory.init(HTableFactory.java:38)
at com.run.puff.control.Bootstrap.start(Bootstrap.java:293)
at com.run.puff.control.Bootstrap.main(Bootstrap.java:449)
[DEBUG] Closing session: 0x1300c46dd880ba6
[DEBUG] Closing client for session: 0x1300c46dd880ba6
[DEBUG] Reading reply sessionid:0x1300c46dd880ba6, packet:: clientPath:null serverPath:null finished:false header:: 2,-11 replyHeader:: 2,52582,0 request:: null response:: null
[DEBUG] Disconnecting client for session: 0x1300c46dd880ba6
2011-05-20 16:45:40,941 INFO [org.apache.zookeeper.ClientCnxn] - Opening socket connection to server Test-DATA03/10.123.122.156:2181
2011-05-20 16:45:40,943 DEBUG [org.apache.hadoop.hbase.zookeeper.ZooKeeperWrapper] - <Test-DATA03:/hbase,org.apache.hadoop.hbase.client.HConnectionManager>Trying to read /hbase/root-region-server
2011-05-20 16:45:40,965 INFO [org.apache.zookeeper.ClientCnxn] - Socket connection established to Test-DATA03/10.123.122.156:2181, initiating session
2011-05-20 16:45:40,970 DEBUG [org.apache.zookeeper.ClientCnxn] - Session establishment request sent on Test-DATA03/10.123.122.156:2181
2011-05-20 16:45:40,978 INFO [org.apache.zookeeper.ClientCnxn] - Session establishment complete on server Test-DATA03/10.123.122.156:2181, sessionid = 0x1300c46dd880da6, negotiated timeout = 60000
2011-05-20 16:45:40,988 DEBUG [org.apache.zookeeper.ClientCnxn] - Reading reply sessionid:0x1300c46dd880da6, packet:: clientPath:null serverPath:null finished:false header:: 1,4 replyHeader:: 1,53606,0 request:: '/hbase/root-region-server,F response:: #31302e3132332e3132322e3135363a3630303230,s{11,46598,1305789309818,1305876061548,4,0,0,0,20,0,11}
2011-05-20 16:45:40,988 DEBUG [org.apache.hadoop.hbase.zookeeper.ZooKeeperWrapper] - <Test-DATA03:/hbase,org.apache.hadoop.hbase.client.HConnectionManager>Read ZNode /hbase/root-region-server got 10.123.122.156:60020
2011-05-20 16:45:41,045 DEBUG [org.apache.hadoop.ipc.HBaseClient] - The ping interval is60000ms.
2011-05-20 16:45:41,079 DEBUG [org.apache.hadoop.ipc.HBaseClient] - Connecting to /10.123.122.156:60020
2011-05-20 16:45:41,104 DEBUG [org.apache.hadoop.ipc.HBaseClient] - IPC Client (47) connection to /10.123.122.156:60020 from an unknown user sending #0
2011-05-20 16:45:41,104 DEBUG [org.apache.hadoop.ipc.HBaseClient] - IPC Client (47) connection to /10.123.122.156:60020 from an unknown user: starting, having connections 1
2011-05-20 16:45:41,170 DEBUG [org.apache.hadoop.ipc.HBaseClient] - closing ipc connection to /10.123.122.156:60020: null
java.io.EOFException
at java.io.DataInputStream.readInt(DataInputStream.java:375)
at org.apache.hadoop.hbase.ipc.HBaseClient$Connection.receiveResponse(HBaseClient.java:514)
at org.apache.hadoop.hbase.ipc.HBaseClient$Connection.run(HBaseClient.java:454)
解决这个问题,最终通过升级集群中的hbase版本解决,使用的是apache官方版本
hbase-0.90.1.tar.gz,升级完毕启动hbase时开始报错
org.apache.hadoop.ipc.RPC$VersionMismatch
$ start-hbase.sh
Test-DATA03: starting zookeeper, logging to /opt/hbase/bin/../logs/hbase-hadoop-zookeeper-TEST-DATA03.out
starting master, logging to /opt/hbase/logs/hbase-hadoop-master-CUC-test-FD-WEB.out
Test-DATA03: starting regionserver, logging to /opt/hbase/bin/../logs/hbase-hadoop-regionserver-TEST-DATA03.out
Test-DATA02: starting regionserver, logging to /opt/hbase/bin/../logs/hbase-hadoop-regionserver-TEST-DATA02.out
Test-DATA01: starting regionserver, logging to /opt/hbase/bin/../logs/hbase-hadoop-regionserver-TEST-DATA01.out
Test-DATA03: Exception in thread "main" org.apache.hadoop.ipc.RPC$VersionMismatch: Protocol org.apache.hadoop.hdfs.protocol.ClientProtocol version mismatch. (client = 63, server = 61)
Test-DATA03: at org.apache.hadoop.ipc.RPC.getProxy(RPC.java:403)
Test-DATA03: at org.apache.hadoop.ipc.RPC.getProxy(RPC.java:384)
Test-DATA03: at org.apache.hadoop.hdfs.DFSClient.createRPCNamenode(DFSClient.java:111)
Test-DATA03: at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:213)
Test-DATA03: at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:180)
Test-DATA03: at org.apache.hadoop.hdfs.DistributedFileSystem.initialize(DistributedFileSystem.java:89)
Test-DATA03: at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:1514)
Test-DATA03: at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:67)
Test-DATA03: at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:1548)
然后通过简单的处理方式,将hadoop-core-0.20.2+737.jar
拷贝至hbase安装目录的lib下问题即解,此问题应该是由于升级的hbase为apache官方版本,其中包含的hadoop-0.20.2-core.jar
与hadoop-cdh3 的 hadoop-core-0.20.2+737.jar
存在差异
再次重启hbase,一切顺利
如下连接代码终于可以正常工作了
hbaseConf = HBaseConfiguration.create();
hbaseConf.set("hbase.master.port", "test-Master:54310");
hbaseConf.set("hbase.zookeeper.quorum", "test-DATA03");
hbaseConf.set("hbase.zookeeper.property.clientPort","2181");
HBaseAdmin
admin = new HBaseAdmin(hbaseConf);
附注:对于
java.lang.NoSuchMethodError: org.apache.hadoop.security.UserGroupInformation.getCurrentUser()Lorg/apache/hadoop/security/UserGroupInformation;
这个异常,在apache 官网上找到了相关该bug的相关信息,
https://issues.......apache.org/jira/browse/HADOOP-7101
HADOOP-7101
UserGroupInformation.getCurrentUser()
fails when called from non-Hadoop JAAS context
代码修改日志:
https://issues.apache.org/jira/secure/attachment/12468097/hadoop-7101.txt
相关文章推荐
- Use java.net.HttpURLConnection/HttpClient 访问web service ( HTTP/HTTPS)
- 非集群client访问HBase方法
- HBase 客户端通过Java访问集群
- ceph rgw java sdk 使用域名访问服务时需要设置s3client的配置项 PathStyleAccess 为true, 负责将报域名异常
- 非集群client访问HBase方法
- java客户端访问集群时用户权限报错:rg.apache.hadoop.security.AccessControlException:
- Jackcess 1.2.13 发布,Java 访问 Access 数据库
- Java client 访问 memcached
- Java基础知识强化之IO流笔记63:随机访问流RandomAccessFile
- java.lang.IllegalAccessError: com/google/protobuf/HBaseZeroCopyByteString
- java应用集锦9:httpclient4.2.2的几个常用方法,登录之后访问页面问题,下载文件
- 如何通过JAVA客户端访问Hbase
- java httpClient使用代理实现外网访问
- ELK研究(一):elasticsearch java api接口操作ES集群 ---TransportClient的使用介绍 bulk批量提交数据
- hbase java client无法连接 hbase server
- Hbase集群client执行报错:Unable to find region for TABLE,,99999999999999 after 10 tries.
- HBASE: java.lang.IllegalAccessError: tried to access method com.google.common.base.Stopwatch.<init>
- 大数据(三十二)HBASE【Hbase JavaAPI访问HBase】
- java sql 访问 access出现的错误
- 若允许Tomcat所有域访问,将clientaccesspolicy.xml和crossdomain.xml加入%TOMCAT_HOME%\webapps\ROOT 目录下即可