티스토리 뷰

타조 사용자 그룹에 타조 설치 관련된 문의가 많아져서 정리를 해봤습니다.


우선 필자는 4대로 구성된 하둡 서버에 다음 그림과 같이 타조를 설치하겠습니다. 타조는 분산 작업 실행시 데이터 지역성(locality)의 이점을 살리기 위하여, 하둡과 같은 서버에 설치하는 것이 좋습니다. 참고로 테스트 용도로 한 대의 서버에 설치하는 경우, 그루터에서 제공하는 타조 데스크탑 버전(http://www.gruter.com/download/)을 이용하면 손쉽게 설치할 수 있습니다.

이제 본격적으로 설치를 진행해보겠습니다.


1. 마스터 서버에 접속한 후, 아래 사이트에서 Apache Tajo를 다운 받습니다.

http://apache.mirror.cdnetworks.com/tajo/tajo-0.11.1/tajo-0.11.1.tar.gz


2. tarball 파일의 압축을 풀어 줍니다. 이미 hadoop 이 설치되어 있다면, hadoop 실행 계정의 홈 디렉터리에 압축을 해제하거나, tajo 계정을 생성한 후, tajo 계정의 홈 디렉터리에 압축을 해제합니다.

[hadoop@master01 ~]$ tar xvfz tajo-0.11.1.tar.gz

[hadoop@master01 ~]$ cd tajo-0.11.1


3. conf/tajo-env.sh 파일에 다음과 같은 정보를 설정합니다.

■ JAVA_HOME: 자바 설치 디렉터리를 설정합니다.

예) export JAVA_HOME=/usr/java/default


■ HADOOP_HOME: 타조가 접속하는 하둡 홈 디렉터리를 설정합니다. 하둡 홈 디렉터리가 정상적으로 설정되지 않 은 경우 타조 클러스터를 실행할 수 없습니다.

예) export HADOOP_HOME=/home/hadoop/hadoop-2.7.2


■ TAJO_MASTER_HEAPSIZE: TajoMaster의 힙 메모리 크기를 설정합니다. 기본값은 1GB입니다.

예) export TAJO_MASTER_HEAPSIZE=1000


TajoWorker의 힙 메모리 크기를 설정합니다. 기본값은 5GB입니다.

예) export TAJO_WORKER_HEAPSIZE=5000


■ TAJO_PID_DIR: 타조 프로세스의 PID 저장 디렉터리를 설정합니다.

예) export TAJO_PID_DIR=${TAJO_HOME}/pids


■ TAJO_LOG_DIR: 타조의 로그 디렉터리를 설정합니다.

예) export TAJO_LOG_DIR=${TAJO_HOME}/logs


참고로 Cloudera Manager로 CDH를 설치했거나, Ambari로 HDP를 설치한 경우에는 아래 사이트를 참고해서 HADOOP_HOME을 설정해야 합니다.

http://hys9958.tistory.com/entry/ambari%EC%99%80-cloudera-manager%EC%97%90%EC%84%9C-tajo-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0


4. conf/tajo-site.xml 파일을 아래와 같이 작성합니다.

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>


<property>

 <name>tajo.rootdir</name>

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

</property>


<property>

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

 <value>master01:26001</value>

</property>


<property>

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

 <value>master01:26002</value>

</property>


<property>

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

 <value>master01:26003</value>

</property>


<property>

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

 <value>master01:26005</value>

</property>


<property>

 <name>tajo.worker.resource.dfs-dir-aware</name>

 <value>true</value>

</property>


</configuration> 


■ tajo.rootdir: 타조의 데이터 파일을 저장할 디렉터리입니다. 기본값은 로컬 파일의 시스템의 /tmp 디렉터리로 설정되므로, 반드시 타조가 사용하는 HDFS의 네임스페이스(core-site.xml 의 fs.defaultFS 속성값)를 등록해야 합니다.

■ tajo.master.umbilical-rpc.address: TajoMaser의 RPC 서버로 사용하는 주소입니다.

■ tajo.master.client-rpc.address: TajoMaser의 RPC 클라이언트가 사용하는 주소입니다.

■ tajo.resource-tracker.rpc.address:  타조의 리소스트래커가 사용하는 RPC 주소입니다.

■ tajo.catalog.client-rpc.address: 타조의 카탈로그 클라이언트가 사용하는 RPC 주소입니다.

■ tajo.worker.resource.dfs-dir-aware: 이 값이 true로 설정될 경우, 하둡의 dfs.datanode.data.dir 속성에 정의된 디스크 목록을 로딩한 후, TajoWorker가 사용할 수 있는 디스크 개수(tajo.worker.resource.disks)로 인식하게 됩니다.


필자는 기본적인 설정 위주로 진행했기 때문에 실제 서버의 스펙이나 워크로드에 따라서 튜닝이 필요할 수 있습니다. 자세한 설정은 다음 사이트를 참고하시면 됩니다.

http://tajo.apache.org/docs/current/configuration/tajo_master_configuration.html

http://tajo.apache.org/docs/current/configuration/worker_configuration.html


또한 타조는 DW이기 때문에 메타 데이터 정보(데이터베이스, 테이블, 칼럼, 파티션 등)를 DB에서 관리합니다. 이를 카탈로그 서버라고 표현하며 별도의 설정이 없을 경우, TajoMaster가 실행되는 서버에 파일 DB인 Derby를 생성해서 관리하게 됩니다. Derby가 아닌 MySQL, MariaDB, Oracle 와 같은 DB를 사용할 경우, 아래 사이트를 참고해서 설치를 진행하면 됩니다.

http://tajo.apache.org/docs/current/configuration/catalog_configuration.html


5. conf/workers 파일을 아래와 같이 수정합니다.

slave01

slave02

slave03


6. 타조 디렉터리를 압축한 후 전체 슬레이브 서버에 배포합니다.

[hadoop@master01 ~]$ cd /home/hadoop

[hadoop@master01 ~]$ tar cvfz tajo.tar.gz tajo-0.11.1

[hadoop@master01 ~]$ scp tajo.tar.gz hadoop@slave01:/home/hadoop

[hadoop@master01 ~]$ scp tajo.tar.gz hadoop@slave02:/home/hadoop

[hadoop@master01 ~]$ scp tajo.tar.gz hadoop@slave03:/home/hadoop

[hadoop@master01 ~]$ ssh hadoop@slave01 "cd /home/hadoop; tar xvfz tajo.tar.gz"

[hadoop@master01 ~]$ ssh hadoop@slave02 "cd /home/hadoop; tar xvfz tajo.tar.gz"

[hadoop@master01 ~]$ ssh hadoop@slave03 "cd /home/hadoop; tar xvfz tajo.tar.gz"


7. 타조 클러스터를 실행합니다.

[hadoop@master01 ~]$ cd tajo-0.11.1

[hadoop@master01 tajo-0.11.1]$ ./bin/start-tajo.sh

Starting single TajoMaster

starting master, logging to /home/hadoop/tajo-0.11.1/bin/../logs/tajo-hadoop-master-master01.out

worker01: starting worker, logging to /home/hadoop/tajo-0.11.1/bin/../logs/tajo-hadoop-worker-worker01.out

worker02: starting worker, logging to /home/hadoop/tajo-0.11.1/bin/../logs/tajo-hadoop-worker-worker02.out

worker03: starting worker, logging to /home/hadoop/tajo-0.11.1/bin/../logs/tajo-hadoop-worker-worker03.out

Tajo master web UI: http://master01:26080

Tajo Client Service: master01:26002


8. 타조 쉘(Tsql)이 제대로 동작하는지 확인합니다.

[hadoop@master01 tajo-0.11.1]$ ./bin/tsql

welcome to

  _____ ___  _____ ___

 /_  _/ _  |/_  _/   /

  / // /_| |_/ // / /

 /_//_/ /_/___/ \__/  0.11.1


Try \? for help.


데이터 베이스 목록을 확인합니다. 타조는 DW이기 때문에 데이터 베이스 단위로 테이블을 생성합니다. \l을 입력하면, 기본 데이터베이스인 default와 카탈로그 정보를 관리하는 information_schema를 출력합니다.

default> \linformation_schema

default


tsql에서 사용할 데이터 베이스를 information_schema로 변경합니다. "\c"를 입력하면 지정한 데이터 베이스로 접속을 변경합니다.

default> \c information_schema

You are now connected to database "information_schema" as user "hadoop".


information_schema 데이터베이스에 등록된 테이블 목록을 확인합니다. "\d"를 하면 현재 데이터베이스의 테이블 목록을 출력합니다.

information_schema> \d

tablespace

databases

tables

columns

indexes

(생략)


tablespace 테이블의 스키마를 확인합니다. "\d 테이블명"을 입력하면, 해당 테이블의 스키마를 출력합니다.

information_schema> \d tablespace

table name: information_schema.tablespace

table uri: SYSTEM

(중략)

schema:

space_id INT4

space_name TEXT

space_handler TEXT

space_uri TEXT


참고로 tsql에서 지원되는 내용은 "\?" 를 입력하면 확인할 수 있습니다.


9. 마지막으로 테이블을 생성한 후 조회 질의를 실행하겠습니다. 필자는 영화 추천 샘플 데이터로 유명한 무비렌즈(movielens)로 테스트를 진행하겠습니다.


무비렌즈 데이터를 다운받은 후, 압축을 해제합니다.

[hadoop@master01 tajo-0.11.1]$ wget http://files.grouplens.org/datasets/movielens/ml-1m.zip

[hadoop@master01 tajo-0.11.1]$ unzip ml-1m.zip


tsql을 실행하여 HDFS에 무비렌즈 데이터를 업로드합니다.

default> \dfs -mkdir /movielens/movies

default> \dfs -mkdir /movielens/ratings

default> \dfs -put ml-1m/movies.dat /movielens/movies

default> \dfs -put ml-1m/ratings.dat /movielens/ratings


HDFS에 업로드한 파일을 확인합니다.

default> \dfs -ls /movielens

Found 2 items

drwxr-xr-x   - hadoop supergroup          0 2016-02-26 14:06 /movielens/movies

drwxr-xr-x   - hadoop supergroup          0 2016-02-26 14:06 /movielens/ratings

default> \dfs -ls /movielens/movies

Found 1 items

-rw-r--r--   1 hadoop supergroup     171308 2016-02-26 14:06 /movielens/movies/movies.dat


무비렌즈용 데이터베이스를 생성한 후 접속을 변경합니다.

default> create database movie_lens;

OK

default> \c movie_lens;

You are now connected to database "movie_lens" as user "hadoop".


CREATE 문을 이용하여 EXTERNAL 테이블을 생성합니다. EXTERNAL은 타조의 루트 디렉터리에 데이터를 저장하지 않고, 테이블 생성 시 설정한 경로로 데이터를 저장합니다. 사용자가 실수로 테이블을 DROP 하더라도 데이터가 보존된다는 장점이 있습니다. 참고로 아래에서 생성하는 ratings 테이블은 사용자별 영화 평점 기록을, movies 테이블은 영화 자체에 대한 메타 정보를 보관합니다.

movie_lens> CREATE EXTERNAL TABLE ratings (

user_id INT ,

movie_id INT ,

rating INT ,

rated_at INT

) USING TEXT WITH ('text.delimiter'='::') LOCATION 'hdfs://master01:9010/movielens/ratings/';


movie_lens> CREATE EXTERNAL TABLE movies (

 movie_id INT,

 title TEXT,

 genres TEXT

) USING TEXT WITH ('text.delimiter'='::') LOCATION 'hdfs://master01:9010/movielens/movies/';


LIMIT 구문으로 샘플 데이터를 조회합니다.

movie_lens> select * from movies limit 5;

movie_id,  title,  genres

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

1,  Toy Story (1995),  Animation|Children's|Comedy

2,  Jumanji (1995),  Adventure|Children's|Fantasy

3,  Grumpier Old Men (1995),  Comedy|Romance

4,  Waiting to Exhale (1995),  Comedy|Drama

5,  Father of the Bride Part II (1995),  Comedy

(5 rows, 0.013 sec, 0 B selected)


ratings 테이블 건수를 계산합니다.

movie_lens> select count(*) from ratings;

Progress: 100%, response time: 0.565 sec

?count

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

1000209

(1 rows, 0.565 sec, 16 B selected)


ratings 테이블과 movies 테이블을 조인하는 쿼리를 실행합니다.

movie_lens> SELECT a.user_id, a.movie_id, b.title, a.rating, to_char(to_timestamp(a.rated_at), 'YYYY-MM-DD HH24:MI:SS') as rated_at

from ratings a, movies b

where a.movie_id = b.movie_id

limit 5;

user_id,  movie_id,  title,  rating,  rated_at

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

1,  1193,  One Flew Over the Cuckoo's Nest (1975),  5,  2001-01-01 07:12:40

1,  661,  James and the Giant Peach (1996),  3,  2001-01-01 07:35:09

1,  914,  My Fair Lady (1964),  3,  2001-01-01 07:32:48

1,  3408,  Erin Brockovich (2000),  4,  2001-01-01 07:04:35

1,  2355,  Bug's Life, A (1998),  5,  2001-01-07 08:38:11

(5 rows, 1.519 sec, 446 B selected)







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