Hbase, Thrift 응용프로그램과 연결하기.
단독으로 설치된 Hbase에 Thrift를 설치합니다. Thirift는 페이스북이 만들기 시작한 이종 언어간의 소통을 위한 인터페이스입니다. 애플리케이션에서 Hbase에 접근할 때 주로 이 기술을 사용합니다.
먼저 서버에 Thrift가 설치되어 있어야 합니다. 이번에는 우분투 서버에서 설치하였는데 다른 환경에서도 큰 차이는 없을 것 같습니다. 아직까지 우분투에서 Thrift 패키지를 지원하지 않는 것 같아 빌드하였습니다. 다운로드에서 최신 버전을 받고 빌드를 해야합니다.
빌드에 앞서 우분투 요구사항을 확인하여 미리 패키지를 설치해줍니다. Required packages와 Optional packages의 항목들을 적절히 선택합니다. 맥을 쓰시는 분은 여기를 참고하십시요.
빌드를 하고 설치합니다.
./configure
make
make install
설치가 완료되었으면 thrift 명령으로 수행이 가능합니다.
펄과 자바의 클라이언트 코드를 사용하기 위해서는 해당 언어를 위한 라이브러리가 설치되어야 합니다.
먼저 자바 라이브러리를 만듭시다. 제가 thrift를 받은 디렉터리가 ~/thrift-0.7.0입니다. 빌드에 ant 패키지가 필요하니 없으면 apt-get install ant로 설치한 후 진행합니다.
cd ~/thrift-0.7.0/lib/java
ant
해당 명령이 수행되면 build/lifthrift-0.7.0.jar가 생성되어 있습니다. 이 라이브러리를 이용해서 클라이언트가 쓸 수 있습니다.
저는 펄용 라이브러리도 만들겠습니다.
cd ~/thrift-0.7.0/lib/perl
perl Makefile.PL
make
make install
(설치에 협조해주신 GNU Make와 Apache Ant 감사합니다.)
먼저 Thrift가 제대로 동작하는지 자바 튜토리얼 버전을 통해 확인해보겠습니다.
cd ~/thrift-0.7.0/tutorial
thrift -r --gen java tutorial.thrift
cd java
ant
sh JavaServer &
sh JavaClient secure
sh JavaClient simple
제대로 동작하면 fg명령어를 이용해서 서버로 이동하신 다음 컨트롤 C를 눌러 나옵니다.
펄 버전도 확인해봅니다.
cd ~/thrift-0.7.0/tutorial
thrift -r --gen perl tutorial.thrift
cd perl
perl PerlServer.pl &
perl PerlClient.pl
역시 제대로 동작하는 것을 확인하면 서버를 제대로 종료합시다.
이제 Hbase의 Hbase.thrift를 이용해서 테스트해봅시다. 테스트용 예제는 Hbase가 있는 곳의 서브 디렉토리 src/examples/thrift에 있습니다. 저의 경우에는 /server/hbase-0.90.4/src/examples/thrift입니다.
cd /server/hbase-0.90.4/src/examples/thrift
thrift --gen perl --gen java \
../../../src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift
아쉽게도 perl 코드를 검증할 예제가 들어있지 않네요. 저는 여기 에서 받아서 해당 디렉토리에 넣었습니다.
이제 Thrift용 Hbase 서버를 돌려봅시다. Hbase 서버를 시작하기 위해 아래와 같이 입력하였습니다. (저는 경로 /server/hbase-0.90.4/에 hbase를 설치하였습니다.)
/server/hbase-0.90.4/bin/hbase thrift start
데몬으로 수행하려면 아래와 같이 합니다. 저는 가능한 데몬 모드에서 쓸 생각입니다.
/server/hbase-0.90.4/bin/hbase-daemon.sh start thrift
펄로 짜여진 Hbase 클라이언트를 수행해봅니다.
PERL5LIB=gen-perl perl DemoClient.pl
PERL5LIB은 임시로 펄 외부 라이브러리르 지정해둔 것입니다. 추가적인 환경 설정을 하지 않고 작동시키기 위함입니다.
자바로 된 클라이언트는 패키징을 facebook을 참고하는 것을 보아 예전 버전용으로 작성된 호환성이 없는 버전인 것 같습니다. 그래서 다루지 않겠습니다.