EXCELSIOR

Apache Tajo (아파치 타조) 개념 및 설치 본문

DataBase/Hadoop

Apache Tajo (아파치 타조) 개념 및 설치

Excelsior-JH 2016. 12. 12. 21:55

아파치 타조(Apache Tajo)는 2010년 고려대학교 컴퓨터학과 데이터베이스 연구실에서 처음 시작되어 2014년 3월에 아파치 재단의 최상위 프로젝트로 승격되었다. 


1. Tajo 기능

아파치 타조의 기능은 다음과 같다.

  • SQL 표준을 지원한다.
  • 성능 향상을 위해 쿼리 전체를 분산처리한다.
  • HDFS를 기본 저장소로 사용하기 때문에 쿼리 실행 결과가 HDFS에 저장된다.
  • Long Time Query에 해당하는 ETL 작업뿐만 아니라 Low Latency도 지원한다.
  • 사용자가 직접 함수를 정의할 수 있다.
  • 다양한 최적화를 위해 비용 기반 최적화 모델(Cost-based Optimization Model)과 확장 가능한 Rewrite Rule을 제공한다.


2. Tajo Architecture


  • 클라이언트 : 타조는 다양한 채널을 통해 쿼리를 실행할 수 있다. JDBC 드라이버, 커맨드 라인으로 제공되는 TSQL shell, 타조가 제공하는 웹 인터페이스에 쿼리를 실행할 수 있다.
  • 타조마스터(Tajo Master): 타조마스터는 타조 클러스터의 마스터 역할을 담당한다. 
    1. 테이블 생성 및 삭제 등 분산 처리 없이 가능한 쿼리를 실행한다.
    2. 클라이언트 API를 RPC로 제공한다.
    3. 클라이언트가 요청하는 쿼리를 파싱하는 쿼리 파서, 논리적인 쿼리 실행 계획을 수립하는 플래너를 제공한다.
    4. 쿼리 실행 계획을 최적화한다.
    5. 쿼리마스터를 관리한다. 쿼리 실행 요청이 들어올 경우 유효한 타조워커 중 하나를 쿼리마스터로 선정한다.
    6. 테이블 정보 및 각종 통계 정보와 같은 메타데이터를 관리하는 카탈로그 서버를 내장하고 있다.
    7. 전체 클러스터의 자원을 관리한다.
  • 타조워커(Tajo Worker): 타조워커는 다음과 같은 두 가지 기능을 수행한다.
    1. 쿼리마스터: 타조마스터가 생성한 논리 실행 계획을 분산 실행 계획으로 변환한다. 타조 클러스터의 다른 타조워커들에게 쿼리 실행을 요청하며, 실행 중인 쿼리를 모니터링 한ㄷ.
    2. 로컬 쿼리 실행: 로컬 쿼리 실행 엔진(Local Query Engine)은 쿼리마스터의 쿼리 실행 요청을 처리한다. 이 엔진에는 스토리지 매니저가 내장돼 있어 HDFS, S3, 로컬 파일 시스템과 같은 다양한 스토리지에 접근할 수 있다.

3. 타조 활용 사례


ODS, DW, DM 각각 저장소의 테이블은 타조기반으로 설계하고 HDFS로 구성할 수 있다. 타조는 ODS와 DW, DW와 DM의 ETL을 담당한다. 타조는 상용 DW시스템들이 제공하는 대부분의 SQL을 지원함으로써 기존의 ETL 질의를 그대로 활용할 수 있다. 타조는 분석 툴에서 실행되는 대화형 분석을 담당한다. 타조는 Long Time Query를 지원하기 때문에 시간이 오래걸리는 ETL 뿐만 아니라 Low Latency Query도 지원한다.


1) 운영계 시스템

기업 운영에 필요한 업무용 시스템이며, 이 시스템의 사용자는 직원이 될 수도 있고, 외부 고객이 될 수도 있다. 예를들어, 인터넷 쇼핑몰에서 상품을 주문할 경우, 내부 인사시스템의 사우너 정보를 갱신하는 경우와 같이 프로세스가 모두 운영계 시스템에서 처리된다. 이 시스템에서 발생하는 데이터는 대부분 데이터베이스 트랜잭션(Transaction) 단위로 데이터를 처리하고 저장하므로, OLTP(Online Transaction Processing) 데이터라고 표현한다.


2) ODS(Operational Data Store)

운영계 시스템의 데이터는 트랜잭션을 중심으로 설계돼 있어서 운영계 시스템 데이터를 대상으로 데이터 분석을 진행할 경우 효용성이 떨어진다. 그래서 데이터 분석을 위한 DW(Data Warehouse)를 설계하고 데이터를 보관하게 된다. ODS는 DW로 데이터를 저장하기 전에 임시로 운영계 데이터를 보관하는 장소이며, 운영계 시스템의 이력성 데이터를 보관한다. ODS가 별도로 존재하는 경우에는 운영계 시스템의 복사본으로 활용되며, DW의 일부일 경우에는 임시 저장소로 사용된다.


3) DW(Data Warehouse)

DW는 운영계 데이터를 사용자 관점에서 주제별로 통합해 별도의 장소에 저장해 놓은 DB이다. 사용자가 쉽게 이해할 수 있고, 최소한의 조인으로 데이터를 획득할 수 있게 매우 단순한 구조로 설계되어있다.


4) DM(Data Mart)

분석의 편의성을 높이고자 DW의 데이터를 주제별, 업무별로 요약해 구성한 데이터 저장소다. 일반적으로 각 부서별로 다양한 예측과 분석을 목표로 만들어진다.


5) ETL(Extraction, Transform, Load)

ETL은 데이터를 추출, 가공, 적재하는 프로세스다. 



4. 타조(Tajo) 설치

타조는 설치방법은 바이너리 파일을 다운받아 설치하는 방법과 타조 소스 저장소에서 타조소스를 다운받아 직접 소스를 빌드해서 설치하는 방법 이렇게 두 가지가 있다. 두 번째 방법은 빌드하기가 까다롭지만 타조의 최신 기능을 사용할 수 있다는 점에서 장점이다.


1) 타조 실행 환경

다음의 소프트웨어가 설치되어 있어야 한다.

        • JDK 1.7 이상
        • Hadoop 2.3.0 이상
        • 프로토콜 버퍼 2.5.0

다음으로 타조를 실행할 계정을 선택해야 한다. 기존에 하둡을 실행하는 hadoop 계정으로 실행할 수 있지만 tajo 계정을 생성하는 것을 권장한다.(교재에 그렇게 나와있어요...) 이때 tajo 계정을 사용할 경우 tajo 계정이 hadoop 계정의 디렉터리에 접근할 수 있게 권한을 수정해야 한다. 다음과 같이 hadoop 계정의 디렉터리 권한을 변경한다.

chmod 755 /usr/local/hadoop2


2) 타조 다운로드

http://tajo.apache.org/downloads.html 에 접속한뒤 "Binary Tarball"옆에 있는 tajo-0.11.3.tar.gz링크를 를릭한다. 


혹은 wget 명령어를 사용해서 다운로드 받을 수 있다.

wget http://apache.tt.co.kr/tajo/tajo-0.11.3/tajo-0.11.3.tar.gz

다운로드 받은 뒤 home 디렉터리에서 /usr/local/ 디렉터리로 이동시킨 뒤 압축해제 한다.

mv tajo-0.11.3.tar.gz /usr/local/ tar xvfz tajo-0.11.3.tar.gz


3) 타조 환경설정 파일 수정

환경설정 파일은 타조 홈 디렉터리의 conf 디렉터리에 들어있다. 

파일명 

용도 

 tajo-env.sh

 타조를 실행하는 셸 스크립트 파일에서 필요한 환경변수를 설정한다. 이파일에는 JDK 경로, 클래스 패스, 데몬 실행 옵션 등 다양한 환경변수를 설정할 수 있다.

 tajo-site.xml

 타조마스터와 타조워커에서 사용하는 속성값을 설정한다. tajo-core-0.11.3.jar에 포함돼 있는 tajo-default.xml을 오버라이드한 파일이다. tajo-site.xml에 설정값이 없을 경우 tajo-default.xml에 있는 기본값을 사용한다.

catalog-site.xml 

 타조의 카탈로그 서버 정보를 설정한다. tajo-core-0.11.3.jar에 포함되어 있는 catalog-default.xml을 오버라이드한 파일이다. catalog-site.xml에 설정값이 없을 경우 catalog-default.xml에 있는 기본값을 사용한다.

 workers

 타조워커를 실행할 서버를 설정한다.


① tajo-env.sh 수정

tajo-env.sh 를 실행한 뒤 다음과 같이 설정 해준다.

# Hadoop home. Required
export HADOOP_HOME=/usr/local/hadoop-2.7.3

# The java implementation to use.  Required.
export JAVA_HOME=/usr/lib/jvm/java-8-oracle

# The directory where pid files are stored. /tmp by default.
export TAJO_PID_DIR=/usr/local/tajo-0.11.3/tajo-0.11.3/pids

# The maximum amount of heap to use, in MB. Default is 1000.
export TAJO_MASTER_HEAPSIZE=1000

# The maximum amount of heap to use, in MB. Default is 5000.
export TAJO_WORKER_HEAPSIZE=5000

② tajo-site.xml 수정

conf 디렉터리에는 tajo-site.xml.template 파일만 들어있으므로 이 파일의 이름을 tajo-site.xml로 변경해야한다. 다음과 같이 변경한다.

mv conf/tajo-site.xml.template conf/tajo-site.xml vi conf/tajo-site.xml

tajo-site.xml을 다음과 같이 설정한다. (이 부분을 수정해주면 되지만 설정을 해주지 않을 경우 default값으로 설정된다. 여기서는 default 값으로 설정한다.)

<property>

  <name>tajo.rootdir</name>

  <value>hdfs://주소 입력</value>

  <description>Base directory including system directories.</description>

</property>

<property>

  <name>tajo.master.umbilical-rpc.address</name>

  <value>localhost:26001</value>

  <description>TajoMaster binding address between master and workers.</description>

</property>

<property>

  <name>tajo.master.client-rpc.address</name>

  <value>localhost:26002</value>

  <description>TajoMaster binding address between master and clients.</description>

</property>

<property>

  <name>tajo.resource-tracker.rpc.address</name>

  <value>localhost:26003</value>

  <description>TajoMaster binding address between master and workers.</description>

</property>

<property>

  <name>tajo.catalog.client-rpc.address</name>

  <value>localhost:26005</value>

  <description>CatalogServer binding address between catalog server and workers.</description>

</property>


③ catalog-site.xml

타조는 모든 메타 정보를 카탈로그 서버에 저장한다. 타조는 다양한 종류의 DBMS를 카탈로그 서버로 사용할 수 있으며, 이와 관련된 설정을 catalog-site.xml에 저장하게 된다. 여기서는 따로 catalog-site.xml을 설정하지 않고 DerbyDB를 기본 카탈로그로 사용해 보겠다.(실은 MS-SQL이 없어서 DerbyDB를 사용하였습니다..ㅜㅜ)


④ workers 수정

workers 파일에는 타조워커 설치용 호스트 목록을 설정한다. 여기서는 localhost만 설정한다.



5. 타조 실행

타조 홈 디렉터리의 하위 디렉터리인 bin 디렉터리에 저장된 start-tajo.sh를 실행한다.

bin/start-tajo.sh
Starting single TajoMaster
starting master, logging to /usr/local/tajo/bin/../logs/tajo-root-master-cjh.out
localhost: starting worker, logging to /usr/local/tajo/bin/../logs/tajo-root-worker-cjh.out
Tajo master web UI: http://localhost:26080
Tajo Client Service: localhost:26002
/usr/local/tajo# jps
8704 Jps
3588 JobHistoryServer
8330 TajoMaster
8475 TajoWorker

타조 클러스터는 stop-tajo.sh 스크립트로 종료할 수 있다. 

타조를 실행했으니, 실제로 테이블을 생성하고,  SQL문을 실행해보겠다. 다음과 같이 타조 홈 디렉터리에 data.csv 파일을 생성한다. 

vi data.csv

1|abc|1.1|a
2|def|2.3|b
3|ghi|3.4|c
4|jkl|4.5|d
5|mno|5.6|e

타조는 사용자가 쿼리를 실행할 수 있게 다음과 같은 컴포넌트를 제공한다.

    • TSQL: 셸 기반의 커맨드 라인 인터페이스다. 셸에서 SQL을 실행할 수 있으며, 카탈로그 정보도 조회할 수 있다.
    • 자바 API: 타조 쿼리를 자바 API 인터페이스로 제공한다.
    • 타조 JDBC: 쿼리 실행을 위한 JDBC 드라이버를 제공한다. JDBC 드라이버를 지원하는 분석 툴과 연동할 수 있다.

여기서는 TSQL을 이용해 쿼리를 실행해본다. TSQL은 타조 홈 디렉터리의 bin 디렉터리에 들어있다. 

bin/tsql

welcome to
   _____ ___  _____ ___
  /_  _/ _  |/_  _/   /
   / // /_| |_/ // / /
  /_//_/ /_/___/ \__/  0.11.3

Try \? for help.
default>

TSQL은 HDFS 실행기능을 제공하며, \dfs 옵션으로 HDFS 명령어를 실행할 수 있다. 다음과 같이 예제 테이블의 데이터가 저장될 디렉터리를 생성한다.

default> \dfs -mkdir /tajo default> \dfs -mkdir /tajo/warehouse default> \dfs -mkdir /tajo/warehouse/table1; default> \dfs -put /usr/local/tajo/data.csv /tajo/warehouse/table1

CREATE 문을 이용해 샘플 테이블을 생성한다. (원래는 hdfs에 올라가있는 데이터를 업로드해야하는데 어떤이유인지 되지않아서 타조 디렉터리에 만들어 놓은 data.csv를 바로 로드 시켰다.)

default> create external table table1 
> (id int, name text, score float, type text)
> using TEXT with ('text.delimiter'='|')
> location '/usr/local/tajo/data.csv';
OK

샘플 테이블의 메타데이터를 조회한다. 테이블 및 함수의 메타데이터는 \d 옵션으로 조회할 수 있다.

default> \d table1;

table name: default.table1
table uri: file:////usr/local/tajo/data.csv
store type: TEXT
number of rows: unknown
volume: 60 B
Options:
        'timezone'='Asia/Seoul'
        'text.null'='\\N'
        'text.delimiter'='|'

schema:
id      INT4
name    TEXT
score   FLOAT4
type    TEXT

실제 데이터가 제대로 조회되는지 확인한다.

default> select * from table1; id, name, score, type ------------------------------- 1, abc, 1.1, a 2, def, 2.3, b 3, ghi, 3.4, c 4, jkl, 4.5, d 5, mno, 5.6, e (5 rows, 0.196 sec, 0 B selected)


6. 타조 웹 인터페이스

타조는 사용자 편의를 위한 웹 인터페이스를 제공한다. http://localhost:26080에 접속하면 다음과 같은 페이지가 나타난다.


위의 navigation bar에서 Query를 선택하면 아래와 같이 어떤 쿼리를 입력했는지 확인할 수 있는 페이지가 나타난다. 


Comments