테스트용으로 사용하는 오래된 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'}




Posted by '김용환'
,