테스트용으로 사용하는 오래된 cloudera hbase 0.94와 apache phoenix 3.2를 연동하려 했지만, 실패한 내용을 적는다.
추후 기회가 오면 최신 버전으로 다양하게 테스트를 잘 하는 것이 좋을 것 같다. ㅠㅠ
아래 링크를 참조했다. http://doc.mapr.com/display/MapR/Using+Apache+Phoenix+on+HBase
apache phoenix의 pheonix 3.2 라이브러리를 hbase에 라이브러리에 복사하고, hbase를 재시작했다. (모든 region 서버에 다 넣고 재시작해야 한다..)
$ sudo cp phoenix-3.2.2/hadoop2/common/*.jar /usr/lib/hbase/lib/
$ ls -al /usr/lib/hbase/lib/
$ sudo service hbase-master restart
phoenix를 실행하려고 했더니. 에러가 난다.
$ ./hadoop2/bin/sqlline.py localhost:2181:/hbase
오류: 기본 클래스 sqlline.SqlLine을(를) 찾거나 로드할 수 없습니다.
아래처럼 대충 수정해놓고 실행했다.
$ mv ./hadoop2/phoenix-3.2.2-client-hadoop2.jar ./hadoop2/phoenix-3.2.2-client.jar
Connecting to jdbc:phoenix:localhost:2181:/hbase
.....
정상작동하는 것처럼 보이지만, shell 이 뜨지 않는다... 뜨헉!
하지만, hbase 로그 상으로는 특별한 것은 보이지 않다.
hbase shell에 들어가 list 커맨드를 날리니. 아무 테이블도 보이지 않았다!
앱에서 다음과 같은 Exception을 발생시키고 있다!!
org.apache.hadoop.hbase.client.NoServerForRegionException: No server address listed in .META. for region xxxx,,1481780733642.719b5b9f72b8c7af2f338ef0b23d76c9. containing row
java.lang.RuntimeException: org.apache.hadoop.hbase.client.NoServerForRegionException: No server address listed in .META. for region xxxx,,1481780733642.719b5b9f72b8c7af2f338ef0b23d76c9. containing row
at org.apache.hadoop.hbase.client.HTableFactory.createHTableInterface(HTableFactory.java:38)
at org.apache.hadoop.hbase.client.HTablePool.createHTable(HTablePool.java:265)
at org.apache.hadoop.hbase.client.HTablePool.findOrCreateTable(HTablePool.java:195)
at org.apache.hadoop.hbase.client.HTablePool.getTable(HTablePool.java:174)
hbase를 재시작하다가 에러가 발생한다.
ERROR org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler: Failed open of region=xxx,,1481780315502.2d152bb821024643f5959e9ea132246d., starting to roll back the global memstore size.
java.lang.IllegalStateException: Could not instantiate a region instance.
at org.apache.hadoop.hbase.regionserver.HRegion.newHRegion(HRegion.java:4247)
at org.apache.hadoop.hbase.regionserver.HRegion.openHRegion(HRegion.java:4427)
at org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler.openRegion(OpenRegionHandler.java:335)
at org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler.process(OpenRegionHandler.java:101)
at org.apache.hadoop.hbase.executor.EventHandler.run(EventHandler.java:175)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at org.apache.hadoop.hbase.regionserver.HRegion.newHRegion(HRegion.java:4244)
... 7 more
Caused by: java.lang.NullPointerException
at org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost.loadTableCoprocessors(RegionCoprocessorHost.java:163)
at org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost.<init>(RegionCoprocessorHost.java:155)
at org.apache.hadoop.hbase.regionserver.HRegion.<init>(HRegion.java:502)
.META. 테이블의 모든 rowkey를 하나씩 수동으로 deleteall로 날리고, 다시 테이블을 생성해서 문제를 해결했다.
deleteall '.META.', 'xxxx,,1481780862570.b48ea78f2b093372649de89574bcb1a7.'
create 'xxxx', { NAME => 'c', BLOOMFILTER => 'ROWCOL', VERSIONS => '1', COMPRESSION => 'GZ', TTL => '-1', BLOCKCACHE => 'false'}
'hbase' 카테고리의 다른 글
[hbase] hbase shell에서 테이블 삭제/추가, 데이터 추가/변경/삭제 예시 (0) | 2016.12.16 |
---|---|
[hbase] list/describe command 주의 (0) | 2016.12.15 |
[hbase] hbase create하다가 hang 발생 해결 (0) | 2016.12.15 |
[hbase] rowkey 검색하기 (0) | 2016.12.15 |
[Hbase] hbase java client test (0) | 2013.04.05 |