[HADOOP] 테스트 HBase 연결
HADOOP테스트 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)
그렇지 않은 경우 새 것을 만드십시오. 그러나 테이블이 존재하는지 확인하려고 시도 할 때 예외가 발생하는 것처럼 보입니다.
HBase에 제대로 연결되어 있지 않은지 궁금합니다 ... 구성이 올바른지, 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.<init>(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)
해결법
-
==============================
1.Yosr이 제안한 구성 매개 변수 외에도,
Yosr이 제안한 구성 매개 변수 외에도,
conf.set("zookeeper.znode.parent", "VALUE")
문제를 해결하는 데 도움이됩니다.
-
==============================
2.아래 속성이 내 문제를 해결했습니다.
아래 속성이 내 문제를 해결했습니다.
Hortonworks의 경우 : hconfig.set ( "zookeeper.znode.parent", "/ hbase-unsecure")
cloudera의 경우 : hconfig.set ( "zookeeper.znode.parent", "/ hbase")
-
==============================
3.
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 사육사 포트 (2181)가 설정 파일과 동일하지 않으면 변경하십시오.
-
==============================
4.HBaseAdmin.checkHBaseAvailable (conf)을 사용할 수 있습니다.
HBaseAdmin.checkHBaseAvailable (conf)을 사용할 수 있습니다.
from https://stackoverflow.com/questions/29564831/testing-java-hbase-connection by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] hadoop 단어 계산 예제를 실행할 수 없습니까? (0) | 2019.06.21 |
---|---|
[HADOOP] hdfs의 하이브 파일은 관리되지 않는 (외부가 아닌) 테이블을 삭제할 때 삭제되지 않습니다. (0) | 2019.06.21 |
[HADOOP] 여러 파일을 단일 매퍼로 결합하는 TextLine과 같은 Scalding Source 만들기 (0) | 2019.06.21 |
[HADOOP] Spark 작업 부하에 HDFS가 필요합니까? (0) | 2019.06.21 |
[HADOOP] JSON 파일 용 Hadoop (0) | 2019.06.21 |