测试java HBase连接

我正在尝试使用HBase Java API将数据写入HBase。 我通过Ambari安装了Hadoop / HBase。

以下是当前配置的配置方式:

final Configuration CONFIGURATION = HBaseConfiguration.create(); final HBaseAdmin HBASE_ADMIN; HBASE_ADMIN = new HBaseAdmin(CONFIGURATION) 

当我尝试写入HBase时,我会检查以确保该表存在

 !HBASE_ADMIN.tableExists(tableName) 

如果没有,请创建一个新的。 但是,似乎在尝试检查表是否存在时会抛出exception。

我想知道我是否没有正确连接到HBase …是否有任何好方法来validation配置是否正确以及我是否连接到HBase? 我得到的例外情况如下。

谢谢。


 java.lang.RuntimeException: java.lang.NullPointerException at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithoutRetries(RpcRetryingCaller.java:209) at org.apache.hadoop.hbase.client.ClientScanner.call(ClientScanner.java:288) at org.apache.hadoop.hbase.client.ClientScanner.nextScanner(ClientScanner.java:268) at org.apache.hadoop.hbase.client.ClientScanner.initializeScannerInConstruction(ClientScanner.java:140) at org.apache.hadoop.hbase.client.ClientScanner.(ClientScanner.java:135) at org.apache.hadoop.hbase.catalog.MetaReader.fullScan(MetaReader.java:597) at org.apache.hadoop.hbase.client.HTable.getScanner(HTable.java:802) at org.apache.hadoop.hbase.catalog.MetaReader.tableExists(MetaReader.java:359) at org.apache.hadoop.hbase.client.HBaseAdmin.tableExists(HBaseAdmin.java:287) at org.apache.hadoop.hbase.client.HBaseAdmin.tableExists(HBaseAdmin.java:301) at com.business.project.hbase.HBaseMessageWriter.getTable(HBaseMessageWriter.java:40) at com.business.project.hbase.HBaseMessageWriter.write(HBaseMessageWriter.java:59) at com.business.project.hbase.HBaseMessageWriter.write(HBaseMessageWriter.java:54) at com.business.project.storm.bolt.package.exampleBolt.execute(exampleBolt.java:19) at backtype.storm.daemon.executor$fn__5697$tuple_action_fn__5699.invoke(executor.clj:659) at backtype.storm.daemon.executor$mk_task_receiver$fn__5620.invoke(executor.clj:415) at backtype.storm.disruptor$clojure_handler$reify__1741.onEvent(disruptor.clj:58) at backtype.storm.utils.DisruptorQueue.consumeBatchToCursor(DisruptorQueue.java:125) at backtype.storm.utils.DisruptorQueue.consumeBatchWhenAvailable(DisruptorQueue.java:99) at backtype.storm.disruptor$consume_batch_when_available.invoke(disruptor.clj:80) at backtype.storm.daemon.executor$fn__5697$fn__5710$fn__5761.invoke(executor.clj:794) at backtype.storm.util$async_loop$fn__452.invoke(util.clj:465) at clojure.lang.AFn.run(AFn.java:24) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.NullPointerException at org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher.getMetaReplicaNodes(ZooKeeperWatcher.java:269) at org.apache.hadoop.hbase.zookeeper.MetaRegionTracker.blockUntilAvailable(MetaRegionTracker.java:241) at org.apache.hadoop.hbase.client.ZooKeeperRegistry.getMetaRegionLocation(ZooKeeperRegistry.java:62) at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.locateMeta(ConnectionManager.java:1203) at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.locateRegion(ConnectionManager.java:1164) at org.apache.hadoop.hbase.client.RpcRetryingCallerWithReadReplicas.getRegionLocations(RpcRetryingCallerWithReadReplicas.java:294) at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:130) at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:55) at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithoutRetries(RpcRetryingCaller.java:201) 

除了Yosr建议的配置参数,指定

 conf.set("zookeeper.znode.parent", "VALUE") 

将有助于解决问题。

以下属性解决了我的问题

对于Hortonworks: hconfig.set("zookeeper.znode.parent", "/hbase-unsecure")

对于cloudera: hconfig.set("zookeeper.znode.parent", "/hbase")

  Configuration conf = HBaseConfiguration.create(); conf.set("hbase.master", "ip_address:60000"); conf.set("hbase.zookeeper.quorum","ip_address"); conf.set("hbase.zookeeper.property.clientPort", "2181"); HBaseAdmin admin = new HBaseAdmin(conf); boolean bool = admin.tableExists("table_name"); System.out.println( bool); 

ip_address :这是hbase集群的ip_adress,如果你的配置文件不一样,请更改你的hbase zookeeper端口( 2181 )。

您可以使用HBaseAdmin.checkHBaseAvailable(conf);