[英]Java: Exception while connecting to Hbase 0.94.1
我寫了一個很短的程序來連接Hbase
。
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.ClusterStatus;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.HBaseAdmin;
public class HbaseMonitor {
public static void main(String args[]){
Configuration conf = new Configuration();
try{
HBaseAdmin hbaseAdmin = new HBaseAdmin(conf);
ClusterStatus clusterStatus = hbaseAdmin.getClusterStatus();
System.out.println("Has regions: "+clusterStatus.getRegionsCount());
}
catch(Exception ex){
ex.printStackTrace();
}
}
}
使用hbase的lib
目錄中可用的jar對其進行編譯,如下所示:
javac -cp /usr/lib/hbase/hbase-0.94.1-Intel.jar:/usr/lib/hadoop/hadoop-core-1.0.3-Intel.jar:/usr/lib/hbase/lib/commons-logging-1.1.1.jar:/usr/lib/hbase/lib/zookeeper.jar:/usr/lib/hbase/lib/commons-configuration-1.6.jar:/usr/lib/hbase/lib/commons-lang-2.5.jar:/usr/lib/hbase/lib/slf4j-api-1.4.3.jar:/usr/lib/hbase/lib/slf4j-log4j12-1.4.3.jar:/usr/lib/hbase/lib/log4j-1.2.16.jar:/usr/lib/hbase/lib/guava-11.0.2.jar:/usr/lib/hbase/lib/protobuf-java-2.4.0a.jar:. HbaseMonitor.java
當我運行它時,出現以下異常:
15/03/19 17:47:07 INFO zookeeper.ZooKeeper: Initiating client connection, connectString=localhost:2181 sessionTimeout=180000 watcher=hconnection
15/03/19 17:47:07 INFO zookeeper.RecoverableZooKeeper: The identifier of this process is 17277@ostrich-node1
15/03/19 17:47:07 INFO zookeeper.ClientCnxn: Opening socket connection to server localhost/0:0:0:0:0:0:0:1:2181. Will not attempt to authenticate using SASL (Unable to locate a login configuration)
15/03/19 17:47:07 INFO zookeeper.ClientCnxn: Socket connection established to localhost/0:0:0:0:0:0:0:1:2181, initiating session
15/03/19 17:47:07 INFO zookeeper.ClientCnxn: Session establishment complete on server localhost/0:0:0:0:0:0:0:1:2181, sessionid = 0x4c31791de7041e, negotiated timeout = 180000
15/03/19 17:47:07 INFO client.HConnectionManager$HConnectionImplementation: getMaster attempt 0 of 10 failed; retrying after sleep of 1006
java.io.IOException: Call to ostrich-node1/192.168.151.50:60000 failed on local exception: java.io.EOFException
at org.apache.hadoop.hbase.ipc.HBaseClient.wrapException(HBaseClient.java:1110)
at org.apache.hadoop.hbase.ipc.HBaseClient.call(HBaseClient.java:1079)
at org.apache.hadoop.hbase.ipc.WritableRpcEngine$Invoker.invoke(WritableRpcEngine.java:150)
at com.sun.proxy.$Proxy5.getProtocolVersion(Unknown Source)
at org.apache.hadoop.hbase.ipc.WritableRpcEngine.getProxy(WritableRpcEngine.java:183)
at org.apache.hadoop.hbase.ipc.HBaseRPC.getProxy(HBaseRPC.java:335)
at org.apache.hadoop.hbase.ipc.HBaseRPC.getProxy(HBaseRPC.java:312)
at org.apache.hadoop.hbase.ipc.HBaseRPC.getProxy(HBaseRPC.java:364)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.getMaster(HConnectionManager.java:710)
at org.apache.hadoop.hbase.client.HBaseAdmin.<init>(HBaseAdmin.java:141)
at HbaseMonitor.main(HbaseMonitor.java:17)
Caused by: java.io.EOFException
at java.io.DataInputStream.readInt(DataInputStream.java:375)
at org.apache.hadoop.hbase.ipc.HBaseClient$Connection.receiveResponse(HBaseClient.java:605)
at org.apache.hadoop.hbase.ipc.HBaseClient$Connection.run(HBaseClient.java:538)
Telnet到hbase-master可以正常工作:
[root@ostrich-node1 test]# telnet ostrich-node1 60000
Trying 192.168.151.50...
Connected to ostrich-node1.
Escape character is '^]'.
localhost的Telnet清楚地表明客戶端可以連接到hbase:
[root@ostrich-node1 test]# telnet localhost 2181
Trying ::1...
Connected to localhost.
Escape character is '^]'.
^CConnection closed by foreign host.
對於上述異常,主hbase-hbase-master-ostrich-node1.log
日志( hbase-hbase-master-ostrich-node1.log
)顯示在以下警告中:
2015-03-19 17:47:07,711 WARN org.apache.hadoop.ipc.SecureServer: Incorrect header or version mismatch from 192.168.151.50:57502 got version 3 expected version 4
從上面的警告,人們可以說, hadoop-core.jar
我使用hbase
被用於一個不同hadoop
。 是的。 因此,我更換了廣口瓶,但不幸的是錯誤沒有消失。
請注意,我已經在安裝了hbase的同一台計算機上執行了我的程序。
Hbase版本:
[root@ostrich-node1 logs]# hbase version
15/03/19 17:59:17 INFO util.VersionInfo: HBase 0.94.1-Intel
Hadoop版本:
[root@ostrich-node1 logs]# hadoop version
Hadoop 1.0.3-Intel
Hbase Shell的工作原理:
[root@ostrich-node1 logs]# hbase shell
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 0.94.1-Intel, r17177, Wed Sep 18 14:52:53 CST 2013
hbase(main):001:0> list
TABLE
ATTR
RECO
SUBSCRIBER
SUBSCRIBER2
TPETEST
test
6 row(s) in 1.0700 seconds
那么,可能是什么問題呢? 請幫忙。
通過執行以下操作,這對我有用:
classpath
的末尾添加HBASE_CONF
的classpath
,如下所示(如果圖像太小,難以理解,請右鍵單擊圖像並在新選項卡中將其打開): 注意 :在我的hbase主節點中,HBASE_CONF = / usr / lib / hbase / conf。
注意:不建議使用HBaseConfiguration()
,但適用於hbase-0.94.1(Intel)。
輸出如下所示:
抱歉,代碼熒光筆不適用於大代碼。 因此,我使用圖像來正確顯示它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.