데이터실무

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

Oozie 개요 및 설치

데이터 저장
Oozie
Oozie 개요 및 설치
작성자
admin
작성일
2021-02-15 13:55
조회
3490

Oozie 등장 배경

빅데이터 프로젝트의 초기 도입 단계에는 특정 문제를 대상으로한 단위 업무에 한정되므로 데이터의 소스가 제한적이거나 적용하는 MapReduce job 역시 비교적 단순한 형태인 경우가 일반적이다. 그러나 확산 내지 고도화 단계에 이르면, 단위 프로젝트의 규모가 커지거나 더 넓은 영역으로 확대돼 여러개의 MapReduce job을 서로 연결해 사용하는 것이 불가피하게 된다. 우지(Oozie)는 바로 이러한 경우에 이 각각의 job들의 시작과 종결, 그 사이의 각종 분기조건 등을 지정해 자동화하거나 스케줄링 하도록 도와주는 솔루션이다.

[그림 Ⅱ-4-1] Oozie에서의 작업흐름 관리

[그림 Ⅱ-4-1] Oozie에서의 작업흐름 관리

우지는 유연한 설계로 인해 job을 손쉽게 제어할 수 있어서 특정 job을 시작하거나 (start), 종료(stop), 일시정지(suspend)할 수 있고, 나아가 시스템 이상상태 등으로 완료되지 않은 job을 재수행(rerun)하도록 지시할 수 있다.
한편 우지는 여전히 맵리듀스(MapReduce) 작업 등의 관리에 주로 사용되지만, 그 밖에도 Pig 스크립트 프로그램의 처리나 스트리밍 처리, 일반 Java 프로그램의 관리 등에도 이용되는 등 그 응용범위가 나날이 확대되고 있다. 나아가 아직은 드물지만 시스템 장애 발생 시 자동 재수행 등 장애처리에 필요한 작업을 모니터링할 수도 있다. 추가적으로 인증 및 권한 관리는 물론, 시스템 처리능력에 따른 부하관리(capacity-aware load throttling)를 통해 여러 사용자의 작업을 서비스(multi-tenant software as a service)로서 관리가 가능하며, 심지어 플러그인 방식으로의 확장 또한 가능하다. 2009년에 시작된 우지는 2012년 톱레벨 프로젝트로 격상됐고, 2015년 2월 말 현재 version 4.01이 배포되고 있다.


Oozie 기본 개념

우지는 자바 기반의 웹 애플리케이션으로서 Java servlet-container에서 수행되는 서버 기반의 워크플로 엔진으로 정의할 수 있다. 여기서 워크플로15)란 여러 활동의 집합체로서 하둡의 맵리듀스 작업, Pig 등 스크립트 언어를 통한 분석 작업(job) 등이 포함된다.

[그림 Ⅱ-4-2] 우지의 작업환경

[그림 Ⅱ-4-2] 우지의 작업환경

우지에서 워크플로는 control 노드와 action 노드 두 가지로 구성된다.


control

control 노드는 작업의 시작과 끝을 지정하기도 하고, 작업 진행의 경로를 통제하기도 한다.
- 작업의 시작과 끝을 지정하는 것으로 start 노드, end 노드가 있다.
- 작업 진행상의 경로 통제를 위한 각종 조건을 정의하는 것으로서는 decision 노드, fork 노드, join 노드 등이 있다.


action 노드

action 노드는 하나의 워크플로가 실제로 계산 또는 처리작업을 하도록 하는 것으로서 실제로 수행되는 작업에는 하둡 맵리듀스, HDFS의 파일 시스템 관련 작업, Pig, SSH, HTTP, eMail 등의 작업과 함께 우지 서브 워크플로 등이 포함된다. 또한 우지는 확장이 가능하기 때문에 이 밖에도 추가적인 각종 action들에도 적용이 가능하다.
우지에서는 워크플로를 방향성 비순환 그래프(DAG: Direct Acyclic Graph) 규칙에 의거해 규정 및 관리한다. DAG란 그래프 이론에서 제시된 것으로서 선행작업과 후행작업이 순서관계를 갖되 작업순서를 효율화하도록 그래프 내에 사이클이 포함되지 않을 것을 요구한다.
우지의 주된 목적은 하둡 환경 내에서의 다양한 컴퓨팅 작업들의 흐름을 관리하기 위한 것으로서 특정 작업이 반복적으로 수행되는 경우에는 이러한 빈도(frequency) 정보도 지정하고 작업의 순서는 DAG 규칙에 의거해 표현한다. 즉, 각각의 작업들 간의 의존관계 (job dependency)를 지정하면 우지는 이러한 정보를 이용해서 실제의 작업이 지정한 대로 진행되도록 관리하는 것이다.

[그림 Ⅱ-4-3] 방향성 비순환 그래프 (Directed Acyclic Graph)

[그림 Ⅱ-4-3] 방향성 비순환 그래프 (Directed Acyclic Graph)


Oozie 아키텍처

Java 웹 애플리케이션으로서의 우지 는 Tomcat과 같은 Java servelet-container 속에서 동작한다.


  • 각종의 워크플로 관련 지정사항
  • 현재 수행 중인 각종 작업 (workflow instances)의 상태정보와 각종 변수 값들

이를 위해 우지에는 기본적으로 아파치의 Derby 데이터베이스가 내장돼 있고 필요에 따라 MySQL 등 별도의 외부 데이터베이스를 이용할 수 있다.

[그림 Ⅱ-4-4] 우지의 실행환경

[그림 Ⅱ-4-4] 우지의 실행환경

우지는 크게 두 개의 요소로 구성돼 있다.


워크플로 엔진 (workflow engine)

작업의 흐름을 정의하거나 정의된 내용에 따라 실제 작업이 진행되도록 하는 기본 기능을 제공한다.


작업조정 엔진 (Coordinator engine)

간혹 사용자의 직접적인 명령에 의해 수시로 작업이 이뤄지기도 하지만 대부분의 우지 내 작업은 특정 시점에 수행되도록 예약(scheduling)하거나 또는 선행 작업을 통해 정상적인 산출물이 만들어졌을 경우에만 이를 확인한 후 다음 순서의 작업이 개시되도록 하는 것이 일반적이다. 또한 경우에 따라서는 외부로부터 특정 이벤트가 발생했을 때 이에 따른 후속작업을 하게 할 수도 있다. 이처럼 지정된 조건에 따라 작업이 일정한 순서로 진행되도록 해주는 것이 우지의 조정시스템(Coordinator System)이다. 조정시스템이야 말로 사용자가 특정 작업을 수행시키는 (이를 흔히 trigger라고 부른다) 조건 등을 프로그래밍 언어로 표현할 수 있도록 해 주는 것이다.

[그림 Ⅱ-4-5] 우지의 애플리케이션 라이프사이클

[그림 Ⅱ-4-5] 우지의 애플리케이션 라이프사이클

우지는 기본적으로는 하둡 클러스터 내에서 서비스 형태로 동작하면서 클라이언트가 제시(submit)하는 워크플로 정의사항에 따라 수행된다. 정의 내용에 따라 즉각 수행되기도 하고 특정 예약시점에 수행이 개시 또는 종료되기도 한다.


Oozie 설치

우지 서버 설치를 위해서는 다음과 같은 환경이 필요하다.


  • Unix/Linux 컴퓨터
  • JDK 1.6 이상
  • 아파치 하둡
  • ExtJS 라이브러리 version 2.2 이상
Oozie 다운로드 및 설정

우지 설치 방법은 배포판을 소스코드 형태로 다운로드 받아 build 작업하거나 build가 완료된 바이너리 제품을 다운로드해 서버에 설치하는 두 가지가 있다.
우선 직접 우지를 빌드하는 경우에는 우지 사이트에서 소스코드를 다운로드 받은 후 tar로 압축을 푼 후 다음과 같이 mkdistro.sh 스크립트를 실행하면 된다.

$ bin/mkdistro.sh

바이너리 파일 형태로 설치하는 경우에는 우선 우지 바이너리를 다운로드 받은 후21) tar 명령을 이용해 압축을 푼다. 다운로드한 후에는 로컬 파일 시스템 내에 설치하고자 하는 위치로 가져가서 파일을 푼다.

$ tar xvzf oozie-3.3.2.tar.gz


하둡 설정의 수정

설치된 하둡의 설정파일인 Hadoop core-site.xml은 다음과 같이 수정한다.

<!-- OOZIE --><property><name>hadoop.proxyuser.[OOZIE_SERVER_USER].hosts</name><value>[OOZIE_SERVER_HOSTNAME]</value></property><property><name>hadoop.proxyuser.[OOZIE_SERVER_USER].groups</name><value>[USER_GROUPS_THAT_ALLOW_IMPERSONATION]</value></property>


ExtJS의 설치

다음으로 ExtJS를 다운로드 하고 우지의 홈 디렉터리 밑에 새로운 디렉터리를 만든 후 extjs 파일의 압축을 푼다.

$ mkdir <OOZIE_HOME>/libext ext-2.2.zip

Hadoop libs를 libext 밑에 놓는다.

$ cd <OOZIE_HOME> $ tar xvf oozie-hadooplibs-3.1.3-cdh4.0.0.tar.gz


설치 스크립트 수행과 결과확인

이제 설치 스크립트파일을 수행한다.

$ bin/oozie-setup-sh -hadoop 0.20.200 ${HADOOP_HOME} -extjs /tmp/ext-2.2.zip

끝으로 우지를 실행한 후 결과를 체크한다.

$ bin/oozie-start.sh $ bin/oozie admin -oozie http://localhost:11000/oozie -status