본문 바로가기

Study/Bigdata

JAVA 또는 Srping으로 Hbase를 사용할때 팁

HBase 데이터를 만지다가, 생각지도 못한것으로 고생을 해서 리마인드 차원에서 포스팅 합니다.


Java또는 Spring 에서 Hbase를 사용하는 방법은

1. Native Library
2. Trift

3. Rest API


이때 속도는 1 > 2,3 정도 Native 방식이 빠름,

만약에 Native 방식을 할때는,Hbase와 같은 네트워크 망을 사용해야하고 Client에서 반드시 hosts를 지정해서 사용해야됨(만약 다른 네트워크라면 Trift와 Rest로 사용가능) ..(관련해서 스택오버플로우에도 물어보긴 했지만.. 재미는 못봤음)


Hbase같은경우 , 일반적인 RDBMS 처럼 select의 개념으로 생각면 피곤. HBASE의 경우 Select에 해당하는것이 scan인데 이때 전체를 fullScan 해서 필터링 하는 방식이기 때문에 상당히 느려터짐


왠만한 값은 유니크한 값(타임라인 테이터같이)이 있다면 그걸 row로 잡아서 넣으면 매우 빠름, 만약 row가 애매하다면 Hive를 이용해서(RDMS로 처리가능하다면 처리해도 상관은 없음) Hbase에 넣는방법도 있음 .


그런데, Hbase는 참 값을 가져오는게 모해서 Hive로 extenal Table을 연결해서 쓸수 있는데, 문제는 이때 Hive가 where절에 조건이 몇개만 들어가도 MapReduce가 걸려버림 , Tez여도 웹에서 가져다 쓰기에는 안좋음


아직 테스트 단계에서만 사용하고 있지만 이런 대안으로 Pheonix도 쓴다고 하는중


실제로 지금 소스좀 분해하고 있는 오픈소스 프로젝트를 보면 Pheonix를 사용함