티스토리 뷰

타조(Tajo) 에 대한 자주 받는 질문 중 하나는 워크플로우에 대한 문의입니다. 타조가 데이터 웨어하우스이고 ETL을 수행할 수 있다고 하는데, 실무자들이 사용할 수 있는 ETL 도구까지 준비되어 있느냐는 것입니다. 물론 타조 자체가 위와 같은 도구를 제공할 수 있지만, 이 영역은 써드 파티(3rd party) 가 담당할 분야라고 생각합니다.


그렇다면 타조를 이용한 워크플로우 도구에는 어떤 것들이 있을까요? 그동안 가장 많이 사용했던 도구는 젠킨스(Jenkins)입니다. 젠킨스는 CI(Continuous Integration) 도구로 많이 알려진 오픈 소스이지만, 일반적인 배치 업무에 도입하기에도 상당히 훌륭합니다. 군더더기 없는 UI와 Downstream 등을 이용한 배치 잡의 선후 관계 설정, 그리고 장애 알림까지 워크플로우 운영에 필수 기능들을 제공합니다.


그리고 상용 ETL 도구인 데이타스테이지(DataStage)도 JDBC Connector를 제공하기 때문에 타조 JDBC 드라이버로 연동이 가능할 것으로 예상됩니다. 조만간 데이타스테이지에 대한 테스트를 해본 후 블로그에 공유할 예정입니다.


1. 아즈카반이란?


젠킨스가 현실적인 대안이지만, 데이타스테이지와 같은 상용도구나 워크플로우 전문 도구들에 비해서 부족한 점이 많을 것입니다. 필자는 이러한 부분을 해소하기 위해서 아즈카반(Azkaban: http://azkaban.github.io)과 연동을 시도해봤습니다. 링크드인은 자사의 복잡한 하둡 관련 데이터 파이프라인을 관리하기 위하여 개발한 오픈 소스 워크플로우 도구이며, 스케쥴러, 시각화된 절차, 인증 및 권한 관리, 작업 모니터링 및 알람 등 다양한 기능을 제공합니다.


아즈카반은 아래와 같이 세 가지 핵심 콤포넌트를 제공합니다.




[그림1] 아즈카반 핵심 컴포넌트 (그림 출처: http://azkaban.github.io/azkaban/docs/latest/images/azkaban2overviewdesign.png)


- MySQL: 전체 메타데이터 정보 저장

- Azkaban WebSever : 프로젝트 관리(생성, 권한, 잡 등록) 기능, 현재 실행되는 플로우 상태 체크, 플로우/잡 이력 확인, 스케쥴러, SLA 룰 관리

- Azkaban ExecutorServer: 프로젝트 접근 및 실제 플로우/잡 실행, 잡 실행 로그 저장


2. 아즈카반 설치하기


아즈카반은 핵심 컴포넌트들의 설치 유형에 따라서 아래와 같이 세 가지 설치 모드를 제공합니다.


- solo sever mode: MySQL 대신에 H2 디비를 사용하며, 웹 서버와 익스큐터 서버를 하나의 프로레스로 실행합니다.

- two sever mode: 메타 데이터 저장소로 MySQL을 사용하며, 웹 서버와 익스큐터 서버를 서로 다른 프로세스로 실행합니다. 

- multiple server mode: 메타 데이터 저장소로 MySQL을 사용하며, 하나의 웹 서버와 N개의 익스큐터 서버를 구성합니다.


필자는 다음과 같이 solo server mode로 설치를 진행하겠습니다. 참고로 다른 모드를 이용한 설치 방법은 http://azkaban.github.io/azkaban/docs/latest/#getting-started 페이지에서 확인할 수 있습니다.


싱글 모드용 설치파일을 아래와 같이 다운 받습니다.

$ wget https://s3.amazonaws.com/azkaban2/azkaban2/2.5.0/azkaban-solo-server-2.5.0.tar.gz


압축을 해제한 후 아즈카반 솔로 서버를 실행합니다.

$ tar xvfz azkaban-solo-server-2.5.0.tar.gz

$ cd azkaban-solo-2.5.0

$ ./bin/azkaban-solo-start.sh

아즈카반 싱글 서버 프로세스 번호를 확인합니다.

$ jps

62058 AzkabanSingleServer


이제 http://localhost:8081/index 주소를 접속하면 그림2가 나타납니다.


[그림2] 아즈카반 싱글 서버 로그인 화면


아이디와 암호는 모두 azkaban을 입력한 후 로그인을 하면, 그림3이 나타납니다. 현재는 초기화 상태라서 아무런 프로젝트가 나타나지 않습니다.


[그림3] 프로젝트 목록 화면


3. 타조 프로젝트 생성하기


아즈카반은 프로젝트 단위로 워크플로우를 제어합니다. 필자는 타조로 코호트 분석을 수행하는 프로젝트를 생성하려고 합니다. 코호트 분석 및 분석에 필요한 쿼리문 정보는 http://blrunner.com/80 사이트를 참고하면 됩니다.


우선 아즈카반 프로젝트 목록 화면에서 Create Project 버튼을 클릭하면 그림4가 나타납니다.  이때 아래와 같이 프로젝트 정보를 입력한 후, 우측 하단의 “Create Project” 버튼을 클릭합니다.


[그림4] 신규 프로젝트 생성 화면


프로젝트가 생성되면, 그림5와 같은 프로젝트 관리화면이 나타납니다.


[그림5] tpch-cohort-analysis 프로젝트 관리화면


4. 타조 잡 등록하기


아즈카반 프로젝트는 여러 개의 잡으로 구성되며, 각 잡들 역시 여러 개의 코맨드로 구성됩니다. 이때 각 코맨드는 타조 쿼리, 하이브 쿼리, 맵리듀스 잡과 같은 실제 실행되는 개별 작업을 의미합니다. 즉 타조 클러스터에서 실행되는 하나의 쿼리가 아즈카반에서는 하나의 코맨드를 나타냅니다. 아즈카반 사용자는 위와 같은 잡과 코맨드 정보를 텍스트 파일로 작성한 뒤, 프로젝트에서 수행될 잡 파일들을 하나의 압축 파일로 만든 뒤 아즈카반에 등록에 해야합니다.  


이러한 파일들을 저장할 commands 디렉터리를 생성합니다.


$ cd /home/hadoop/azkaban-solo-2.5.0

$ mkdir commands

$ cd commands


맵리듀스 잡, 하이브, 피그와 같은 잡들은 아즈카반에 기본 잡으로 제공되지만, 아직 타조는 제공되지 않습니다. 그래서 타조의 CLI인 tsql에서 타조 쿼리 파일을 호출하는 방식으로 쿼리를 실행하게 됩니다. 이를 위하여 각각의 타조 쿼리를 별도 파일로 작성해야합니다. 우선 특정 월의 첫번째 구매자를 그룹핑하는 타조 쿼리를 작성합니다.


$ vi create_cohort.tql DROP TABLE IF EXISTS cohort;

CREATE TABLE cohort AS

SELECT o_custkey,

 min(o_orderdate) as cohort_date,

 min(substr(o_orderdate, 0, 8)) cohort_id

FROM orders

WHERE o_orderdate BETWEEN '1992-01-01' AND '1992-06-30'

GROUP BY o_custkey

ORDER BY o_custkey;


그룹핑된 사용자들의 재구매 패턴을 분석하는 타조 쿼리를 작성합니다.


$ vi create_cohort_analysis.tql

DROP TABLE IF EXISTS cohort_analysis;

CREATE TABLE cohort_analysis AS

SELECT c.cohort_id,

 substr(o_orderdate,0,8) as order_month,

 count(distinct(o.o_custkey)) as buyer_cnt,

 count(o.o_orderkey) as order_cnt,

 round(sum(o.o_totalprice)) as amount,

 round(avg(o.o_totalprice)) as avg_amount

FROM   orders o

JOIN cohort c ON o.o_custkey = c.o_custkey

WHERE  o.o_orderdate between '1992-01-01' and '1992-06-30'

GROUP BY c.cohort_id, substr(o_orderdate,0,8)

ORDER BY c.cohort_id, substr(o_orderdate,0,8) ASC;


cohort 테이블을 생성하는 잡 파일을 작성합니다. tsql을 호출하는 코맨드 라인 방식이므로, type 속성을 command로 설정한 후, command 속성에 실제 코맨드 라인에서 실행할 코맨드를 기재합니다. 이때 만약 여러 개의 코맨드를 순차적으로 실행하고 싶다면, command.1=Xyz, command.2=Xyz 와 같은 방식으로 순번을 붙이면서, 코맨드를 지정하면 됩니다.


$ vi create_cohort_table.job

type=command

command=/home/hadoop/tajo-0.11.2-SNAPSHOT/bin/tsql -f /home/hadoop/azkaban-solo-2.5.0/commands/create_cohort.tql 


재구매 패턴 분석 쿼리를 실행하는 잡 파일을 작성합니다. 아즈카반은 잡 실행의 선후 관계를 설정할 수 있으며, 이를 위하여 dependencies라는 속성을 제공합니다. 해당 잡의 부모 잡, 즉 먼저 실행되어야 하는 잡들이 있다면 dependencies 속성에 해당 잡들의 이름을 작성합니다. 이때 잡 이름은 해당 잡의 파일명(job 확장자 제외)입니다. 아래 잡의 경우 반드시 그룹핑 테이블이 생성된 후 실행되어야 하므로, dependencies에 create_cohort_table을 설정합니다.


$ vi create_cohort_analysis_table.job

type=command

dependencies=create_cohort_table

command=/home/hadoop/tajo-0.11.2-SNAPSHOT/bin/tsql -f /home/hadoop/azkaban-solo-2.5.0/commands/create_cohort_analysis.tql


잡 파일들을 하나의 파일로 압축합니다.


 $ zip cohort_analysis.zip create_cohort_table.job create_cohort_analysis_table.job

 adding: create_cohort_table.job (deflated 20%)

 adding: create_cohort_analysis_table.job (deflated 28%)


이제 그림5의 Upload 버튼을 클릭한 후 cohort_analysis.zip 파일을 업로드합니다. 파일이 업로드되면 그림6과 같이 Flows 탭에create_cohort_analysis_table 잡이 출력됩니다.


[그림6] 프로젝트 워크플로우 리스트


create_cohort_analysis_table 좌측의 화살표 버튼을 클릭하면, 그림7과 같이 dependencies를 고려한 잡 정보가 출력되는 것을 확인할 수 있습니다.

[그림7] create_cohort_analysis_table 잡 선후 관계


5. 타조 워크플로우 실행하기


그림7의 Execute Flow을 클릭하면, 그림8과 같이 워크플로우 실행 설정 화면이 나타납니다. 이때 화면 우측에는 워크플로우 디펜던시 정보가 시각화됩니다. 참고로 좌측의 Notification은 워크플로우 실행 완료 및 오류에 대한 이메일 알림 설정, Failure Options는 워크플로우 실행 오류시 실행중인 잡의 중지 여부, 전체 잡의 중지 여부 등을 설정할 수 있습니다. Concurrent는 잡 실행 시 동시성을 제어할 수 있습니다. 또한 좌측 하단의 Schedule을 클릭하면 워크플로우의 배치 스케쥴을 설정할 수 있습니다. 그럼 이제 타조 워크플로우를 실행해보겠습니다. 우측 하단의 Execute 버튼을 클릭하면 워크플로우가 실행됩니다.


[그림8] 워크플로우 실행 환경 설정


워크플로우가 실행되면, 아래 그림과 같이 워크플로우가 Submitted 됐다는 메세지가 출력됩니다.


[그림9] 워크플로우 제출 완료 메세지


이때 Continue 버튼을 클릭하면, 실행 상태 정보 조회 페이지(그림10)로 이동합니다. 워크플로우가 실행 중이라면 좌측 상단에 RUNNING으로 표기가 되며, Kill 버튼으로 플로우를 종료하거나, Pause로 잠시 멈출 수도 있습니다. 또한 Graph 탭에는 플로우내의 각각의 잡의 실행 상태가 시각화됩니다. 실행 완료된 잡은 녹색, 실행 중인 잡은 하늘색으로 표시됩니다.


[그림10] 워크플로우 실행 상태 정보 : Graph


워크플로우 상태 정보 페이지의 두번째 탭인 Job List를 클릭하면, 그림11과 같이 잡 시작 시간, 잡 종료 시간, 소요 시간, 실행 상태와 같은 정보가 출력됩니다.


[그림11] 워크플로우 실행 상태 정보 : Job List


그리고 각 잡의 Details 링크를 클릭하면, 다음과 같이 로그 파일도 확인할 수 있습니다.


[그림12] 잡 실행 로그 파일


또한 그림11의 잡 이름을 클릭하면 다음과 같이 아즈카반에서 해당 잡의 전체 실행 이력이 출력됩니다.


[그림13] 개별 잡 실행 히스토리 조회


마지막으로 그림6에서 Executions 버튼을 클릭하면, 다음과 같이 해당 워크플로우의 실행이력을 확인할 수 있습니다.


[그림14] 워크플로우 실행 히스토리 조회

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