티스토리 뷰

오늘은 타조와 HBase를 연동하는 방법, 즉 HBase에서 저장된 테이블을 타조에서 SQL로 조회하고, 반대로 타조에서 HBase에 테이블을 생성하고, 해당 테이블에 데이터를 로딩하는 방법을 설명하고자 합니다.


타조는 다양한 파일 포맷을 지원하기 위해서 Appender와 Scanner 인터페이스를 제공합니다. Appender는 해당 파일 포맷으로 레코드를 기록하기 위한 인터페이스이고, Scanner는 해당 파일으로 저장된 레코드를 조회할때 사용하는 인터페이스입니다. 위 두 개의 인터페이스를 구현한다면, 새로운 파일 포맷을 손쉽게 타조에 적용할 수 있습니다.


현재는 텍스트 파일(CSV 파일), SequenceFile, Avro, 컬럼 기반의 RCFile, Parquet를 지원하며, 이번달 릴리즈 예정인 0.10.0 버전부터는 NoSQL인 HBase도 지원할 예정입니다. 또한 최근에는 오픈소스 검색엔진인 ElasticSearch의 파일 포맷도 지원하기 위한 작업을 진행 중입니다.





1.타조 설치


첫째, HBase 연동 기능은 개발 브랜치에만 적용되어 있어서, 타조 코드를 새롭게 빌드해야 합니다. 다음과 같이 아파치 trunk 코드를 내려받아서습니다.


git clone -b master https://git-wip-us.apache.org/repos/asf/tajo.git


그리고 다음과 같이 tarball 파일을 빌드합니다. 이때 자신이 사용하는 하둡 버전을 입력합니다. 예를 들어 하둡 2.5.0 버전을 사용할 경우, 다음과 같이 빌드하면 됩니다.


mvn clean install -DskipTests -Pdist -Dtar -Dhadoop.version=2.5.0


둘째, 빌드된 타조를 설치합니다. 우선 다음과 같이 tarball 파일의 압축을 해제합니다.


셋째, conf 디렉터리의 tajo-env.sh 파일에서 다음과 같은 속성을 설정합니다.


  • HADOOP_HOME: 하둡 설치 디렉터리

  • HBASE_HOME: HBASE 설치 디렉터리


넷째, conf 디렉터리의 tajo-site.xml 파일에 tajo.rootdir 속성을 설정합니다. 이 속성은 타조의 데이터 파일을 저장하는 경로이며, HDFS의 fs.default.name을 기준으로 설정하면 됩니다.


 <property>

   <name>tajo.rootdir</name>

   <value>hdfs://localhost:9010/tajo</value>

 </property>


다섯째, 타조의 카탈로그 서버 정보를 설정합니다. 타조는 DW이기 때문에 카탈로그 서버, 즉 메타데이터 서버를 사용합니다. 디폴트는 로컬 파일 시스템의 /tmp 디렉터리에 아파치 Derby를 설치해서 사용합니다. 하지만 /tmp는 임시 디렉터리라서 언제든지 삭제될수 있고, Derby를 사용할 경우 다른 사용자들과 타조를 공용으로 사용하는 것이 어렵습니다. 그래서 가능한 별도의 DBMS를 카탈로그 서버로 설정하는 것을 추천합니다.


타조는 MySQL, MariaDB, Oracle, PostgreSQL 등 다양한 DB를 카탈로그로 사용할 수 있으며, 해당 설정은 conf 디렉터리의 catalog-site.xml에 저장하면 됩니다. 다음 예제 코드는 MySQL을 카탈로그 서버로 사용하는 예입니다. 참고로 로컬 서버에 MySQL이 설치되어 있고, DB명과 접속 계정은 모두 tajo로 되어 있다고 가정했습니다.


<property>

 <name>tajo.catalog.store.class</name>

 <value>org.apache.tajo.catalog.store.MySQLStore</value>

</property>

<property>

 <name>tajo.catalog.jdbc.connection.id</name>

 <value>tajo</value>

</property>

<property>

 <name>tajo.catalog.jdbc.connection.password</name>

 <value>tajo</value>

</property>

<property>

 <name>tajo.catalog.jdbc.uri</name>

 <value>jdbc:mysql://localhost:3306/tajo?createDatabaseIfNotExist=true</value>

</property>


참고로 위와 같이 DBMS를 카탈로그로 설정할 경우, 해당 DB의 JDBC 파일을 반드시 타조의 lib 디렉터리에 복사해야합니다. 참고로 보다 자세한 타조 설정 방법은 http://tajo.apache.org/docs/current/getting_started.html 사이트에서 확인할 수 있습니다.


이제 타조 설치 작업이 마무리됐습니다. 지금부터는 실제로 HBase와 연동하는 작업을 진행하겠습니다.



2.HBase 연동



HBase 쉘에서 info와 content라는 두 개의 칼럼 패밀리로 구성된 blog 테이블을 생성합니다.


create 'blog', {NAME=>'info'}, {NAME=>'content'}


그리고 content 칼럼 패밀리에는 title이라는 칼럼 퀄리파이어로 데이터를 입력하고, info 칼럼 패밀리에는 author와 date라는 칼럼 퀄리파이어로 데이터를 입력합니다.


put 'blog', 'hyunsik-02', 'content:title', 'Getting started with Tajo on your desktop'

put 'blog', 'hyunsik-02', 'info:author', 'Hyunsik Choi'

put 'blog', 'hyunsik-02', 'info:date', '2014-12-03'

put 'blog', 'blrunner-01', 'content:title', 'Apache Tajo: A Big Data Warehouse System on Hadoop'

put 'blog', 'blrunner-01', 'info:author', 'Jaehwa Jung'

put 'blog', 'blrunner-01', 'info:date', '2014-10-31'

put 'blog', 'jhkim-01', 'content:title', 'APACHE TAJO™ v0.9 HAS ARRIVED!'

put 'blog', 'jhkim-01', 'info:author', 'Jinho Kim'

put 'blog', 'jhkim-01', 'info:date', '2014-10-22'


이제 타조 쉘인 Tsql에서 HBase의 blog 테이블을 조회하겠습니다. 이미 HBase에 만들어진 테이블을 조회할 경우에는 다음과 같이 external 테이블을 생성합니다.


CREATE EXTERNAL TABLE hbase_blog (rowkey text, author text, register_date text, title text)

USING hbase WITH (

 'table'='blog'

 , 'columns'=':key,info:author,info:date,content:title');


우선 HBase를 파일 포맷으로 사용한는 경우에는 반드시 USING hbase 문을 사용해야 합니다. 그리고 WITH 문 뒤에 다음과 같은 옵션을 설정합니다.


  • table : HBase에서 생성된 테이블 이름입니다.

  • colums: HBase의 로우키, [칼럼 패밀리: 칼럼 퀄리파이어] 목록으로 나타냅니다. 로우키의 경우 예약어인 “:key”를 사용하며, 칼럼 패밀리 목록은 이미 HBase 쉘에서 정의한 테이블을 기준으로 작성하면 됩니다.

  • hbase.zookeeper.quorum: table 항목에 설정된 테이블이 사용할 주키퍼 주소입니다. 이 항목을 설정하지 않을 경우, HBASE_HOME에 설정된 경로에서 주키퍼 주소를 참고합니다. 만약 여러 개의 HBase 클러스터에 저장된 테이블을 조회할 경우, 이 항목에서 각 테이블의 주키퍼 주소를 설정하면 됩니다.


이때 CREATE EXTERNAL TABLE문에 사용한 hbase_blog라는 테이블은 타조 카탈로그에 생성되며, 타조만 사용하는 테이블입니다. 그래서 HBase에 생성한 테이블 이름과 동일하게 설정할 필요는 없습니다. 또한 CREATE 문에 사용한 칼럼인 rowkey, author, register_date, title 칼럼은 반드시 WITH 문에 사용한 columns 의 항목 개수와 동일하게 설정되어야 합니다.


이제 SQL문을 이용하여, 해당 테이블의 데이터를 조회하겠습니다.


default> select * from hbase_blog;

rowkey,  author,  register_date,  title

-------------------------------

blrunner-01,  Jaehwa Jung,  2014-10-31,  Apache Tajo: A Big Data Warehouse System on Hadoop

hyunsik-02,  Hyunsik Choi,  2014-12-03,  Getting started with Tajo on your desktop

jhkim-01,  Jinho Kim,  2014-10-22,  APACHE TAJO™ v0.9 HAS ARRIVED!



default> select * from hbase_blog where rowkey = 'blrunner-01' ;

Progress: 100%, response time: 2.043 sec

rowkey,  author,  register_date,  title

-------------------------------

blrunner-01,  Jaehwa Jung,  2014-10-31,  Apache Tajo: A Big Data Warehouse System on Hadoop


이번에는 타조에서 HBase에 새로운 테이블 생성하겠습니다. 다음과 같이 CREATE TABLE 문으로 테이블을 생성합니다.


CREATE  TABLE hbase_blog_backup (rowkey text, author text, register_date text, title text)

USING hbase WITH (

 'table'='blog_backup'

 , 'columns'=':key,info:author,info:date,content:title');


위와 같이 테이블을 선언하면 HBase에 blog_backup이라는 새로운 테이블이 생성되고, 타조에서는 hbase_blog_backup이라는 이름으로 이 테이블을 사용합니다. 이제 기존 테이블인 hbase_blog의 데이터를 hbase_blog_backup에 로딩해보겠습니다.


INSERT OVERWRITE INTO hbase_blog_backup

SELECT * FROM hbase_blog;


HBase 쉘에서 blog_backup 테이블을 조회하면, 다음과 같이 데이터가 로딩되는 것을 확인할 수 있습니다.


hbase(main):002:0> scan 'blog_backup'

ROW COLUMN+CELL

blrunner-01 column=content:title, timestamp=1421227531054..

(중략)

jhkim-01 column=info:date, timestamp=1421227531054..

3 row(s) in 0.5190 seconds


마지막으로 테이블 삭제는 다음과 같이 DROP TABLE 문으로 실행할 수 있습니다.


DROP TABLE hbase_blog

DROP TABLE hbase_blog PURGE


이때 PURGE 옵션을 사용하면 HBase 데이터가 모두 삭제되고, 

PURGE 옵션이 없으면 HBase 데이터는 삭제하지 않고, 타조 카탈로그 정보만 삭제합니다.

저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
댓글
댓글쓰기 폼