데이터실무

DA, SQL, DB보안 등 실무자를 위한 위한 DB기술 바이블!

타조

데이터 처리
SQL On Hadoop
타조
작성자
admin
작성일
2021-02-15 14:11
조회
1829

타조 소개 및 아키텍처

개요

타조는 하둡 기반의 대용량 데이터를 SQL 형태의 명령을 통해 분산 분석 작업을 지원하는 대용량 데이터 웨어하우스다. 14년 3월에 아파치 톱 레벨 프로젝트가 됐고, 한국에서 처음 시작된 프로젝트여서 현재는 한국인 사용자 비율이 상대적으로 높다. SQL 형태의 대용량 데이터 웨어하우스라는 점에서 하이브와 비슷하다. ETL뿐 아니라 Low-Latency도 지원한다는 점에서 큰 차이가 있다. 타조의 특징은 다음과 같다.


  • 기본적으로 하둡의 HDFS을 메인 저장소로 활용한다. 물론 하이브에서처럼 external table을 이용해 로컬 디렉터리를 이용할 수 도 있다.
  • 다양한 파일 형태와 압축을 지원한다.
  • 하이브와 같이 자체 SQL(HiveQL)을 만들지 않고, 가능한 ANSI-SQL 표준을 준수한다. 비표준 추가 기능에 대해서는 PostgreSQL 표기법과 오라클 표기법을 사용한다.하이브와 같이 데이터 수정 구문(Update)은 지원하지 않는다.
  • Long-Term Query뿐 아니라 Ad Hoc Query지원한다.
  • 자동 최적화를 지원한다.
타조 아키텍처

[그림 Ⅲ-2-26] 타조 아키텍처

[그림 Ⅲ-2-26] 타조 아키텍처


마스터-워커 모델

S기본적으로 마스터-워커(Master-Worker) 클러스터 모델을 채용하고 있고, 질의별 쿼리 마스터가 있다.



마스터


  • 마스터는 하나만 존재하며 DDL이나 아주 작은 쿼리 등 분산 처리가 필요 없는 질의를 수행한다.
  • 쿼리 파서와 타조 리소스 매니저 등을 이용해 여러 채널로 쿼리가 들어오면, 쿼리 마스터를 할당하고 Resource를 관리한다. 또한 Logical Planner가 쿼리 마스터에 논리 실행 계획을 전달한다.
  • 리소스 관리는 버전에 따라 자체 관리를 하기도 하고 Yarn과 연동해 관리하기도 한다.
  • Tajo Catalog가 내장돼 있으며 Derby, MySQL 등을 지원한다. 또한 Hcatalog를 통해서 하이브의 Metastore와 연동이 가능해 하이브와 같은 테이블에서 작업할 수 있다.

Worker

실제로 질의에 대한 분산 처리를 수행하며, 크게 쿼리 마스터와 TaskRunner로 나뉜다.
  • 쿼리 마스터
    1. - 각각의 쿼리의 대한 실제적인 마스터 역할을 하며, 마스터(여기에서 마스터는 쿼리 마스터가 아닌 마스터-워커의 마스터를 지칭)를 통해 전달된 쿼리와 로컬 플랜을 기반으로 분산 플랜을 수립한다.
    2. - 그 이후 분산 플랜에 따른 태스크 할당을 마스터에 요청해 태스크 실행 명령을 내리고, 쿼리처리 진행 상태 정보를 수집해 마스터로 전달한다. 이것은 모든 쿼리마다 하나씩 생성되며, 쿼리 종료 시 해당 쿼리 마스터도 없어진다.
    3. - 쿼리마다 각각의 쿼리 마스터가 존재함으로써 마스터 노드의 부하를 줄여주고 안정성을 높인다.
  • TaskRunner는 쿼리 마스터로부터 할당 받은 태스크를 수행하는 역할을 한다.
  • TajoClient를 통해 CLI와 같은 커맨드로도 쿼리가 가능하고, JDBC로 연결해 자바 등의 프로그램과 연동할 수 있다.

Query planning processor


[그림 Ⅲ-2-27] Query planning processor

[그림 Ⅲ-2-27] Query planning processor


Cost Based Optimization

기존 하이브는 조인을 할 때 테이블 크기를 고려해 사용자가 조인 순서를 결정해야 했다. 그러나 타조는 사용자의 쿼리를 입력 받으면 Cost를 고려해서 임의로 순서를 결정해 준다.



Distributed Execution Plan


[그림 Ⅲ-2-28] Distributed Execution Plan

[그림 Ⅲ-2-28] Distributed Execution Plan




다이내믹 스케줄링

쿼리를 처음 시작할 때 각 노드에 Task와 자원을 할당하고, 끝까지 변동이 없는 Fixed Scheduling과 다르게 쿼리를 진행하면서도 추가로 Task 할당을 할 수 있도록 구현돼 있다.



파티셔닝

기존 하이브에서는 컬럼 key를 기반으로한 파티셔닝만 가능했지만, 타조에서는 range(범위) 파티셔닝이 가능하다.



프로그레시스 쿼리 최적화

실행할 쿼리의 Sum, Min, Max 등의 통계값을 수집한 후 런타임중에 파티션 범위나 분산 조인 등을 조정한다.



벡터 엔진


벡터화는 데이터를 CPU 캐시 단위에 맞게 잘라서 CPU 성능을 극대화해 데이터를 처리하는 방식으로 최근 이슈가 되고 있는 기능이다. 하이브 0.13에도 적용됐고, 많은 SQL-On-Hadoop에서 적용되고 있다.

- Rewrite Rule

[그림 Ⅲ-2-29] Rewrite Rule

[그림 Ⅲ-2-29] Rewrite Rule



타조 설치
사전 준비 작업

타조를 설치하기 위한 사전 준비 조건은 아래와 같다.


  • 리눅스 또는 Mac OS X 시스템(CentOS 6 추천)
  • JDK 1.6 이상
  • 하둡: 하둡 2.x 추천
  • 타조를 직접 컴파일하는 경우 Protocol Buffer, Git, Maven 3.0 이상이 필요하다. 이때 Protocol Buffer는 하둡 버전에 따라 적합한 Protocol Buffer 버전을 선택
  • SSH Key 복사
설치

타조를 설치하기 위한 사전 준비 조건은 아래와 같다.



바이너리 배포 버전 이용 시

가장 간단하게 설치할 수 있는 방법이다. 그러나 하둡, 하이브 버전 등이 일치하지 않으면 작동되지 않는 경우가 있으니 주의가 필요하다. 설치 위치는 크게 중요하지 않으며, 일반적으로 /home/계정이름/이나 /usr/local/에 설치하는 경우가 많다. http://tajo.apache.org/downloads.html에서 다운받을 수 있으며, 이 글을 쓰는 시점 기준으로 최신 버전인 0.8.0 기준으로 설명한다.

wget http://apache.org/dyn/closer.cgi/tajo/tajo-0.8.0/tajo-0.8.0.tar.gz tar xzfv tajo-0.8.0.tar.gz tar xzfv tajo-0.8.0 tar.gz


소스코드를 빌드해 사용하는 경우

프로젝트 성격에 따라 http://tajo.apache.org/downloads.html에서 안정 버전(0.8)을 내려 받거나 아래와 같이 git을 통해 최신 버전을 받아 사용할 수 있다. 물론 git -b 옵션을 이용해 원하는 branch 버전을 받을 수 도 있다. 그러나 타조는 다른 프로젝트에 상대적으로 역사가 짧고, 아파치에서 가장 활발하게 코드가 업데이트되는 프로젝트 중 하나이므로 가능한 최신의 코드를 사용하는 것이 좋다.
한 가지 주의해야 할 점은 위와 같은 특징 때문에 타조 버전에 따라 바뀌는 부분이 많다는 것이다. 따라서 세부 설정이나 기능을 사용할 때는 업데이트된 내용 확인이 필요하다. 또한 빌드 시에는 사용중인 하둡 버전을 맞춰 줘야 한다.

git clone https://github.com/apache/tajo.git cd tajo-src mvn package -DskipTests -Pdist -Dtar

- 빌드 화면 예제

[phoenix@p1 tajo]$ mvn clean package -DskipTests -Pdist -Dtar -Phcatalog-0.13.0 [INFO] Scanning for projects... [INFO] ------------ [INFO] Reactor Build Order: [INFO] [INFO] Tajo Main [INFO] Tajo Project POM ... 중략 [INFO] main:

[exec] $ tar czf tajo-0.9.0-SNAPSHOT.tar.gz tajo-0.9.0-SNAPSHOT [exec] [exec] Tajo dist tar available at: /home/phoenix/tmp/tajo/tajo-dist/target/tajo-0.9.0-SNAPSHOT.tar.gz [exec] [INFO] Executed tasks [INFO] -------------- [INFO] Reactor Summary: [INFO] [INFO] Tajo Main .......... SUCCESS [2.350s] [INFO] Tajo Project POM .......... SUCCESS [0.704s] .....중략 [INFO] --------------- [INFO] BUILD SUCCESS [INFO] ---------------- [INFO] Total time: 56.617s [INFO] Finished at : Tue Sep 23 16:00:55 KST 2014 [INFO] Final Memory: 96M/1082M [INFO]-------------------

정상적으로 빌드됐다면, tajo-dist/target/에 타조 버전에 따라서 tajo-x.x.x-xxx.tar.gz 파일이 생성된다 (위 로그에서는 중간에 명시된 대로 /home/phoenix/tmp/tajo/tajo-dist/target/tajo-0.9.0-SNAPSHOT.tar.gz 이 생성됐다). 이 파일을 복사해서 위에서처럼 원하는 위치에서 아래의 명령을 통해 압축을 해제한다.

cp tajo-dist/target/tajo-x.x.x-xxx.tar.gz . tar xzfv tajo-x.x.x-xxx.tar.gz


CDH

- CDH 4

많은 프로젝트에서 CDH(클라우데라 하둡)를 많이 사용하므로 CDH와 호환도 가능하다. 그러나 가급적이면 CDH 5 이상 버전을 추천한다. CDH 4 이하 버전은 타조와 연동이 잘 안되고 Protocol Buffer 문제 등으로 별도의 타조 버전이 존재한다. 꼭 사용해야 한다면, https://github.com/gruter/tajo-cdh 에서 코드를 내려 받아서 사용하면 된다. 그러나 2014년 4월 이후로 업데이트가 안되고 있으므로 추천하지는 않는다(‘그루터’에 문의하면 업데이트된 코드를 얻을 수도 있다.)

- CDH 5CDH 5은 Protocol Buffer 2.5 버전을 사용하므로 소스가 호환된다. 그러나 아파치 타조에서는 아파치 하둡을 기본 설정으로 하기 때문에 몇 가지 파일을 수정하고 빌드해 주어야 한다.
수정해야 할 부분을 다 언급하기에는 한계가 있으므로 공식 위키인 https://cwiki.apache.org/confluence/display/TAJO/How+to+Build+Apache+Tajo+for+CDH5를 참고한다


설정

타조는 로컬 모드와 분산 모드를 함께 지원한다. 테스트하기에는 로컬 모드가 좋고, 본격적으로 사용할 때는 분산 모드를 추천한다.



로컬 모드

로컬 모드는 하나의 서버에 타조 데몬들을 모두 띄워서 사용하는 방법이다.

- conf/tajo-env.sh필수 설정으로는 HADOOP_HOME과 JAVA_HOME이 있으며, 본인의 설정에 맞는 하둡 경로와 JDK 경로를 지정해 준다.

export HADOOP_HOME=/HadoopDirectory export JAVA_HOME=/JDKDirectory

타조를 실행한다.

bin/tajo-start.sh


분산 모드

분산 모드는 여러 노드에 타조를 설치해 분산 처리하는 방법이다. 아래의 설정 사항을 모두 적용한 후 타조 디렉터리 전체를 분산 처리할 노드들에 복사한다. 단 디렉터리 경로는 마스터가 위치한 노드의 디렉터리와 일치해야 한다.
일반적으로 NameNode가 있는 곳 가운데 한 군데에 Tajo Master가, DataNode가 있는 모든 노드에 Tajo Worker가 동작할 수 있도록 설정한다. DataNode에 있는 모든 노드에 타조를 설치하는 이유는 최대한 분산하기 위함이기도 하고, Data Locality를 활용하기 위해서다.
최근 Tajo Repository에 Tajo Master HA 기능이 추가됐는데, 이 기능을 사용하면 2군데에서 Tajo Master가 뜰 수 있도록 설정해야 한다.

- conf/worker

worker를 할당할 노드의 hostname를 입력한다.

$ cat > conf/workers Host1 Host2 Host3 Host4 Host5 ... <ctrl + d>

- 하둡 디렉터리 생성

hdfs dfs -mkdir /tajo hdfs dfs -chmod g+w /tajo

tajo-site.xml에서 tajo.rootdir 설정을 /tajo가 아닌 다른 곳으로 지정했다면, 디렉터리 생성과 권한 설정도 해당 디렉터리 경로에 맞게 수행하면 된다.

각종 설정파일


- conf/tajo-env.sh

타조를 실행시킬 때 사용되는 셀 스크립트 환경변수 등을 지정해 주는 파일이다. 주요 파라미터는 다음과 같다.

[표 Ⅲ-2-2] tajo-env.sh의 주요 파라미터


파라미터 설명 기본 값
HADOOP_HOME 하둡 디렉터리. 타조를 실행하는 계정에 하둡 디렉터리 접근 권한이 있어야 한다.
JAVA_HOME JDK 디렉터리
TAJO_CLASSPATH $TAJO_HOME/lib 외에 다른 라이브러리를 참조해야 할 때 지정한다.
TAJO_MASTER_HEAPSIZE Tajo Master 데몬의 Heapsize(MB 단위) 1000
TAJO_WORKER_HEAPSIZE Tajo Worker 데몬의 Heapsize(MB 단위) 1000
TAJO_QUERYMASTER_HEA PSIZE Tajo QueryMaster 데몬의 Heapsize(MB 단위) 1000
TAJO_LOG_DIR 타조의 로그 디렉터리 ${TAJO_HOME}/logs
TAJO_PID_DIR 타조의 PID 디렉터리. 2개 이상의 타조를 사용해야 할 경우 PID의 디렉터리를 다르게 지정해 주는 것이 좋다.
또한, 기본설정이 /tmp로 지정돼서 혹시 삭제가 될 수도 있으므로 원하는 디렉터리로 바꾸는 것을 추천한다.
/tmp
TAJO_WORKER_STANDBY_MODE true 일 경우 설정된 서버에 worker 또는 querymaster가 설정된다.
false일 경우에 yarn을 사용하는 모드로 설정된다. 단 false 설정은 버전에 따라 yarn 지원이 달라지므로 가능한 true로 한다.
true
HIVE_HOME Hive Metastore를 사용할 경우, 하이브의 경로를 지정한다.
HIVE_JDBC_DRIVER_DIR Hive Metastore를 사용할 경우 Hive_JDBC_DRIVER의 경로를 지정한다

-conf/tajo-site.xml

타조에서 사용되는 각종 파라미터를 설정하는 파일이다. 하이브의 hive-site.xml과 유사하다. 다른 설정 값들도 동일하지만, 특히 tajo-site.xml은 버전에 따라서 바뀌는 부분이 많으므로 사용시 확인이 필요하다.

[표 Ⅲ-2-3] tajo-site.xml의 주요 파라미터


파라미터 설명 기본 값
tajo.rootdir 타조의 루트 디렉터리.
기본설정은 로컬 디렉터리로 설정돼 있지만, 대부분 하둡의 경로를 지정한다.
file:///tmp/tajo-${user.name}/
tajo.warehouse.directory Tajo 웨어하우스의 디렉터리 ${tajo.roodir}/warehouse
tajo.staging.directory 각 쿼리에서 사용하는 임시 디렉터리 /tmp/tajo-${user.name}/staging
tajo.catalog.uri /var/tajo-catalog-${user.name}/db;create=true
tajo.master.info-http.address 마스터 웹 페이지 포트 번호. 이 주소를 통해 클러스터나 쿼리 현황 등을 볼 수 있다. 0.0.0.0:26080
tajo.master.umbilical-rpc.address 마스터 서버의 관리 포트 localhost:26001
tajo.master.client-rpc.address 마스터 서버의 타조 클라이언트 포트.
CLI나 JDBC 사용 시 사용이 된다..
localhost:26002
tajo.worker.info-http.address 워커 웹 페이지의 포트 0.0.0.0:28080
tajo.worker.qm-info-http.address 쿼리 마스터 웹 페이지의 포트 0.0.0.0:28081
tajo.worker.peer-rpc.address 워커의 RPC 포트.
이 포트를 이용해 마스터로부터 질의 실행 명령 등을 받는다.
0.0.0.0:28091
tajo.worker.client-rpc.address 워커의 클라이언트 RPC 포트.
쿼리마스터 모드로 동작할 경우, 질의 상태 정보를 클라이언트와 통신하기 위해서 사용된다.
0.0.0.0:28092
tajo.worker.qm-rpc.address 쿼리마스터의 RPC 포트.
TajoMaster는질의 실행 요청을 이 포트를 이용해 쿼리마스터로 요청한다.
0.0.0.0:28093
tajo.worker.tmpdir.locations 워커의 로컬 작업 디렉터리.
성능 향상을 위해 여러 디스크를 사용하는 것이 좋다. 디렉터리 구분은 ‘,’로 한다.
/tmp/tajo-${user.name}/tmpd ir
tajo.worker.tmpdir.cleanup-atstartup 워커 구동 시 temp 디렉터리에 있는 파일을 삭제할 것인지 설정한다. false
tajo.worker.resource.cpu-cores 워커에서 사용할 CPU 수.
tajo.worker.resource.dedicated가 false인 경우에만 적용된다.
1
tajo.worker.resource.memorymb 워커에서 사용할 메모리 크기.
tajo.worker.resource.dedicated가 false인 경우에만 적용
1024
tajo.worker.resource.disks 워커에 할당된 디스크 슬롯 개수 tajo.worker.resource.dedicated가 거짓(false)인 경우에만 적용 1
tajo.worker.resource.dedicated 참(True)으로 설정할 경우 위 3개의 옵션을 무시하고 사용 가능한 리소스를 모두 할당 false
tajo.worker.resource.dedicatedmemory-ratio tajo.worker.resource.dedicated가 설정된 경우, 사용할 메모리의 사이즈 비율을 결정 0.8
tajo.worker.resource.dfs-dir-a ware tajo.worker.resource.disks의 옵션을 무시하고 각 노드에서 HDFS가 사용하는 디스크의 개수를 자동으로 할당 false
tajo.task.disk-slot.default 하나의 태스크가 사용하는 디스크 숫자. 이 숫자를 늘리면 여러 개의 쿼리를 수행 가능하지만 한 디스크에서 여러 작업이 운영될 수 있기 때문에 성능이 더 느려질 수 있다. 1

- tajo-site.xml 예시

- tajo-site.xml 예시

위는 예시일 뿐이다. 자신의 설정에 따라서 namenode hostname과 port tajomaster의 hostname를 맞게 바꿔 줘야 한다. 이때 로컬 호스트나 127.0.0.1이 아니라 실제 IP 주소 혹은 실제 IP 주소를 매핑시킨 호스트네임을 입력해야 한다.

- catalog-site.xml

타조는 자체적으로 Metastore를 가질 수도 있고, 하이브의 테이블 정보를 읽어와 같이 사용할 수도 있다. 자체 Metastore를 사용할 때는 tajo.catalog.store.class에서 설정할 데이터베이스의 종류를 선택하면 된다. 하이브와 연동하기 위해서는 하이브의 Metastore를 기동 시키고 tajo.catalog.store.class를 org.apache.tajo.catalog.store.HcatalogStore로 설정해야 한다.

[표 Ⅲ-2-4] catalog-site.xml의 주요 파라미터


파라미터 설명 기본 값
tajo.catalog.store.class 네 종류의 Metastore를 지원한다.
  1. - org.apache.tajo.catalog.store.DerbyStore
  2. - org.apache.tajo.catalog.store.MySQLStore
  3. - org.apache.tajo.catalog.store.MemStore
  4. - org.apache.tajo.catalog.store.HcatalogStore
org.apache.tajo.cata log.store.DerbyStore
tajo.catalog.connection.id Metastore에서 사용할 데이터베이스의 ID
tajo.catalog.connection.pass word Metastore에서 사용할 데이터베이스의 패스워드
tajo.catalog.uri Metastore에서 사용할 데이터베이스의 접속 주소

- bin/tajo

bin/tajo 파일은 원래 실행 스크립트 파일이라 크게 바꿀 부분이 없다. 그런데 간혹 하둡 종류에 따라 Hadoop Jar 파일의 위치가 다른 경우가 있다. 이럴 경우 아래와 같이 Hadoop_MODULE_DIRS를 임의로 지정해 줘도 된다.

# HADOOP JAR DIRS HADOOP_MODULE_DIRS=" /usr/lib/hadoop /usr/lib/hadoop/lib /usr/lib/hadoop-hdfs /usr/lib/hadoop-hdfs/lib /usr/lib/hadoop-맵리듀스 /usr/lib/hadoop-yarn"



실행

구동 방식은 하둡과 비슷하다. 전체를 일괄 시작/중지 시킬 수 있는 스크립트와 하나의 노드에서 특정 데몬을 시작/중지 시킬 수 있는 스크립트가 있다.

# 전체 타조 시작/중지 #Master Node에서 실행 bin/start-tajo.sh bin/stop-tajo.sh # 특정 데몬 시작/중지 # 데몬을 구동시킬 Node에서 실행 bin/tajo-daemon.sh start 데몬이름(master, worker 등) bin/tajo-daemon.sh stop

실행한 후에는 http://masterip:26080의 주소를 웹 페이지에서 접속해 타조 상태를 확인한다.
웹 페이지는 크게 다음과 같이 5개의 메뉴가 있다.


  • Home: 타조의 전반전인 상태를 모니터링할 수 있는 웹 페이지다. Master Status, Cluster Summary, Query Summary 등의 정보를 볼 수 있다.
  • Cluster: 각 워커들의 Memory, Heartbeat 등의 상태를 볼 수 있다.
  • Query: 현재 실행중인 쿼리나 완료된 쿼리를 볼 수 있으며, 쿼리 이름을 클릭하면 상세한 진행 현황 및 Plan을 볼 수 있다.
  • Category: 타조의 데이터베이스, 테이블 정보들을 볼 수 있다.
  • Execute Query: 웹 페이지에서 간단하게 쿼리를 실행시키고 결과를 받아 볼 수 있다.

실습

타조 셀

타조는 하이브와 같이 셀 모드를 지원한다. 지원하는 기능 또한 하이브와 유사하며, 문법만 약간 다르다. 셀 모드를 실행할 때는 tsql이라는 명령어를 사용하며, 위치는 $tajo/bin 디렉터리에 있다. 미리 경로를 설정해 두는 것이 편리하다.


기본문법

$ tsql [option] [database name]

콘솔 창에서 tsql을 입력하면 바로 셀 모드로 진입할 수 있다. 혹은 옵션 값을 주거나 데이터베이스 이름을 명시해서 셀 모드로 진입 시 데이터베이스에 접속한 상태에서 시작할 수 있다. 여기에서 말하는 데이터베이스는 오라클이나 MySQL 같은 RDB를 지칭하는 말이 아니다. 하이브나 타조 등에서 테이블들을 모아서 특정 단위로 관리할 수 있는데, 이것을 의미하는 데이터베이스다. 데이터베이스에대해서는 DDL 부분에서 다시 소개하겠다.

사용할 수 있는 옵션은 다음과 같다.

[표 Ⅲ-2-5] tsql 명령어 옵션


옵션 설명
-c “ ” “ “에 쿼리를 직접 입력해 실행한다. 이 경우 셀 모드로 들어가지 않는다.
-f query name 미리 쿼리를 입력한 후 해당 파일을 지정한다. 이 경우 셀 모드로 들어가지 않는다.
-h hostname 접속할 호스트를 지정한다. 설정하지 않으면 로컬 호스트로 접속된다.
-p port 접속할 포트번호를 지정한다. 설정하지 않으면 26002로 접속된다.

셀 모드로 진입하면 아래와 같은 커맨드를 사용할 수 있다. 아래의 커맨드는 ‘\?’를 입력하면 확인할 수 있고, 특정 커맨드의 설명만 보고 싶으면, ‘\? 커맨드’를 입력하면 된다.

[표 Ⅲ-2-6] 커맨드 종류


커맨드 설명
₩q 셀 모드를 종료한다.
\l 데이터베이스 리스트를 조회한다.
\c 현재 접속중인 데이터베이스를 조회한다. 기본 데이터베이스는 Default다.
\c DatabaseName 입력한 데이터베이스에 접속한다.
\d 현재 데이터베이스의 테이블 리스트를 조회한다.
\d TableName 입력한 테이블 정보를 조회한다.
\df 함수 리스트를 조회한다..
\df FunctionName 입력한 함수의 정보를 조회한다.
\! 리눅스 셀 명령어를 실행한다.
\dfs Dfs 명령어를 실행한다.
\admin Tajo Admin 명령어를 실행한다.
\set name value 설정할 변수이름과 값을 입력한다. 이것을 이용해 환경설정 옵션 변경도 가능하다.
\unset name 설정한 변수 설정을 제거한다.
SQL 문법

타조의 SQL 문법은 표준 SQL과 비슷하기 때문에 크게 어려운 점이 없다. 중요한 문법이나 특수한 문법 위주로 간단히 설명하겠다.


DDL

데이터베이스 생성/삭제


  • 생성: CREATE DATABASE [IF NOT EXISTS] <database_name>
  • 삭제: DROP DATABASE [IF NOT EXISTS] <database_name>
  • IF NOT EXISTS 문장을 넣지 않아도 문제는 없지만, 데이터베이스 존재 여부에 따라 에러 메시지가 발생할 수 있기 때문에 가능하면 넣어주는 것이 좋다.

테이블 생성/삭제


  • Managed Table 생성: CREATE TABLE [IF NOT EXISTS] <table_name> [(<column_name> <data_type>, ... )] [using <storage_type> [with (<key> = <value>, ...)]] [AS <select_statement>]
  • External Table 생성: CREATE EXTERNAL TABLE [IF NOT EXISTS] <table_name> (<column_name> <data_type>, ... ) using <storage_type> [with (<key> = <value>, ...)] LOCATION '<path>'
  • Storage Type에는 CSV(TextFile), RCFile, Parquet, SequenceFile을 지원한다. 앞서 언급한 Columnar Table을 만들어 주기 위해서는 여기에서 RCfile이나 Parquet로 지정하면 된다.

Key-value는 각종 정보를 넣는 곳이다.

아래 쿼리에서 좀 더 알아 보자.

1. CREATE EXTERNAL TABLE test1 ( foo bigint, bar text) 2. USING csv WITH 3. ('csvfile.delimiter'=':', 'compression.codec'=' org.apache.hadoop.io.compress.SnappyCodec') 4. LOCATION 'hdfs://localhost:9010/tajo/warehouse/test1';


  • EXTERNAL TABLE로 test1이라는 이름의 테이블을 생성을 하고, 컬럼은 bigint형의 foo와 텍스트형의 bar로 한다.
  • CSV 파일 형태로 저장한다. 또한 CSV 파일 형태로 파일을 넣으면 인식된다.
  • 파일 구분자는 ‘|’로 하고, 압축은 org.apache.hadoop.io.compress.SnappyCodec으로 한다.
    참고로 타조에서 지원 가능한 형태는 BZip2, Deflat, Gzip, Snappy 등이다.
  • 실제 데이터는 데이터는 하둡의 /tajo/warehouse/test1에 저장한다.

삭제


  • DROP TABLE [IF EXISTS] <table_name> [PURGE]
  • 테이블 삭제 시 PURGE 옵션을 넣으면 테이블 Table 정보뿐 아니라 데이터도 삭제된다. PURGE 옵션을 넣지 않고 테이블만 삭제 후 테이블을 재생성하면 오류가 발생할 수 있으니 주의해야 한다.
데이터 입력

INSERT문은 하이브와 두 가지를 제외하고 거의 유사하다. 첫 번째로 하이브에서는 INSERT OVERWRITE와 INSERT INTO가 있지만, 타조에서는 INSERT OVERWRITE INTO와 INSERT INTO가 있다. 하이브와는 달리 insert 문이 꼭 들어가야 한다. 두 번째로 타조에서는 INSERT시 파티션 이름을 명시하지 않아도 된다. 하이브에서는 partition column임을 명시해 줘야 하지만, 타조에서는 일반 컬럼과 똑같이 사용하면 되기 때문에 훨씬 편리하다.


파티셔닝

파티셔닝을 하는 방법은 매우 간단하다. 테이블 생성시 파티션 기준이 될 컬럼 이름만 명시해 주면 된다. 물론 Range partition과 Hash Partition 기능도 가능하다고 했지만, 아직 완전한 상태는 아니다.
Column Partitioning을 할 경우 아래와 같이 쿼리를 한다.

CREATE TABLE test(foo TEXT, bar TEXT) PARTITION BY COLUMN(month TEXT, date TEXT)

또한 파티션을 추가할 때는 임의로 데이터를 넣으면 자동으로 추가되기 때문에 훨씬 편리하다. 단, 이때 추가된 파티션을 하이브에서는 인식하지 못하므로 하이브와 연동하고 있다면, 하이브에서 alter table을 통해 파티션을 넣어주거나 msck repair table 명령어를 이용해 전체 파티션을 다시 읽어오도록 해야 한다.


조회

조회는 아래와 같은 문법으로 하면 된다.

SELECT [distinct [all]] * | <expression> [[AS] <alias> [,...] [FROM <table name> [[AS] <table alias name> [,...]] [WHERE <condition>] [GROUP BY <expression> [, ...]] [HAVING <condition>] [ORDER BY <expression> [ASC|DESC] [NULL FIRST|NULL LAST] [, ...]]


함수

타조에서도 하이브와 같이 다양한 함수를 지원한다. 함수들은 타조 버전에 따라서 지원 여부가 달라지는 경우가 많기 때문에 타조 셀에 들어가서 \df 명령을 이용해 지원 함수 리스트를 확인하도록 하자. 조회를 해 보면 아래와 같이 사용 가능한 함수 이름, 타입, 함수 설명 등이 돼 있어서 편리하다.

[그림 Ⅲ-2-30] 지원함수 예시

[그림 Ⅲ-2-30] 지원함수 예시

또한 파티션을 추가할 때는 임의로 데이터를 넣으면 자동으로 추가되기 때문에 훨씬 편리하다. 단, 이때 추가된 파티션을 하이브에서는 인식하지 못하므로 하이브와 연동하고 있다면, 하이브에서 alter table을 통해 파티션을 넣어주거나 msck repair table 명령어를 이용해 전체 파티션을 다시 읽어오도록 해야 한다.


백업

Catalog를 백업하고 싶을 때는 매우 간단한 명령어 하나로 전부 완료가 된다. 아래와 같이 bin 폴더에 있는 tajo-dump 명령어를 실행시키면, 지정한 테이블의 DDL이 backup.sql에 저장된다. 물론 backup.sql 파일 이름은 임의로 정해도 된다.

$ tajo-dump tablename > backup.sql

그리고 이것을 복구하고 싶을 때는(테이블 재생성 시) 만들어진 DDL 쿼리 문을 아래와 같이 그대로 실행하면 된다.

$ tsql - f backup.sql

마지막으로 특정 테이블이 아닌 전체 테이블을 백업할 때는 ?a 옵션을 이용하면 된다.

$ tajo-dump -a>backup.sql


JDBC
Tajo JDBC Library

타조의 JDBC 기능을 사용하기 위해서는 하이브와 달리 여러 가지 파일이 필요하다. 타조 JDBC 라이브러리 파일은 타조 버전에 따라 조금씩 달라지기 때문에 확인이 필요하며, 타조를 패치하거나 버전을 바꾼 경우에도 타조 JDBC 라이브러리를 교체해 주는 것이 좋다.
타조 JDBC 라이브러리를 얻는 방법은 크게 두 가지가 있다. 하나는 바이너리 배포판에서 받는 것과 다른 하나는 본인이 빌드한 파일에서 가져오는 방법이다. 물론 이것은 본인의 현재 타조 설치 방법이나 버전에 따라 알맞게 선택해야 한다.


  • 타조 바이너리 버전: 다운 받은 압축파일을 풀어서 생긴 폴더에서 share/jdbc-dist/*
  • 타조 소스 버전: 빌드 후 tajo-dist/target/tajo-x.y.z/share/jdbc-dist/*

이 디렉터리를 자바 프로젝트의 CLASSPATH로 지정하고, 추가로 타조의 tajo-site.xml과 하둡의 core-site.xml, hdfs-site.xml 또한 CLASSPATH로 지정한다.


Tadpole DB Hub
Tadpole DB Hub란?

RDMS를 사용하는 사람들이면 누구나 Toad, Orange, sqlgate, sql developer와 같은 툴을 사용해 보았을 것이다. 이러한 툴은 DB 스키마를 보거나 SQL을 수행할 때 매우 유용하다. 유료인 경우가 많고 하이브나 타조와 연결되지 않는 경우가 많다. 물론 하이브나 타조 웹 페이지 등에서도 이와 비슷한 기능을 제공하지만, 기능이나 완성도 측면에서 많이 떨어진다. 그래서 오픈소스이면서 아파치 하이브, 타조, 아마존 RDS, MongoDB, 큐브리드, 마리아 DB, MySQL, 오라클, SQLite, MSSQL, PostgreSQL 모두를 관리할 수 있는 Tadpole DB Hub를 소개한다. Tadpole DB Hub는 한국의 조현종 씨가 만든 오픈소스로서 여러 가지 DBMS 뿐만 아니라, 빅데이터 이용 DB들을 관리하는 데에 설치하지 않고도 사용할 수 있다.


Tadpole DB Hub 설치와 사용방법

Tadpole DB Hub는 스탠드얼론, War 버전으로 크게 나눌 수 있다. 설치 파일은 http://goo.gl/NrH696에서 받을 수 있으며, 최근 크롬 웹 스토어에도 추가 됐다(http://goo.gl/nt5qoM). Tadpole DB Hub의 코드를 직접 수정하면서 테스트할 것이 아니라면 War 버전을 사용하는 것이 좋다.

[그림 Ⅲ-2-31] Tadpole DB Hub 연동방식

[그림 Ⅲ-2-31] Tadpole DB Hub 연동방식


스탠드얼론 버전 설치
  • TadpoleDBHub-1.x.x\tadpole-standalone.exe 파일을 더블 클릭해 실행한다.
  • 실행되면서 브라우저가 자동으로 실행되며, http://127.0.0.1:10081/tadpole에 접속하면 사용할 수 있다.
화면 설명과 사용 방법

[그림 Ⅲ-2-32] 메인 화면

[그림 Ⅲ-2-32] 메인 화면


  • 툴바: DB 연결, 저장, 권한 설정(관리자, DBA, 어드민 권한의 사용자일 경우 나타남), 환경 설정등을 한다.
  • 데이터베이스 목록: 신규 DB의 등록, 삭제, 사용자 공유 데이터가 있다.
  • 오브젝트 탐색기: 데이터베이스 목록에서 선택된 DB의 오브젝트(Table, View) 등의 목록을 표시한다.
  • 메인 화면: DB의 쿼리 에디터, 몽고디비의 프로파일 화면 등 주요 작업 화면이 표시된다.

위와 같이 메뉴가 직관적으로 돼 있어서 사용하기 편리하다. 위 화면에서 버튼을 클릭하면, 원하는 DB를 등록할 수 있고 아래와 같이 접속 정보를 입력한 후 사용하면 기본적인 설정이 완료된다.

[그림 Ⅲ-2-33] 접속 정보창

[그림 Ⅲ-2-33] 접속 정보창


  • 연결하려는 DB 종류
  • 시스템 정보
  • 접속정보
  • 접속 시 설정할 부가정보
  • 실행 버튼

좀 더 자세한 내용은 http://goo.gl/RoSh25를 참고한다.