
Oozie는 Apache Hadoop 작업을 관리하기 위한 워크플로 스케줄링 시스템입니다.
Oozie Workflow 작업은 지향성 비순환 그래프(DAG)의 작업입니다.
Oozie Coordinator jobs는 시간(빈도)과 데이터 사용 가능성에 의해 트리거되는 반복적인 Oozie Workflow jobs입니다.
# 탄생 배경
초기 하둡 환경에서 데이터 엔지니어들은 각기 다른 맵리듀스(MapReduce) 작업이나 Hive 쿼리, Pig 스크립트를 수동으로 실행하거나
쉘 스크립트를 통해 연쇄적으로 실행했습니다. 그러나 이러한 방식은 다음과 같은 치명적인 한계를 가졌습니다.
- 의존성 관리의 부재: 앞선 작업이 실패했을 때 후속 작업을 중단시키거나 재시도하는 로직을 구현하기 복잡함.
- 데이터 가용성 확인의 어려움: 특정 경로에 HDFS 데이터가 생성되었을 때 작업을 시작하는 트리거 로직을 표준화하기 어려움.
- 운영 가시성 부족: 대규모 클러스터에서 작업이 수행될 때, 어떤 지점에서 병목이나 오류가 발생했는지 파악할 모니터링 체계가 부족함.
Oozie는 이러한 '워크플로우 관리의 파편화'를 해결하고, 하둡 작업들을 하나의 서비스 단위로 관리하기 위해 개발되었습니다.
# 용어
| 액션(Action) | 우지에서 실행할 수 있는 하나의 작업 단위 |
| 워크플로우(Workflow) | 액션들의 제어와 작업을 어떤 순서로 실행할지 정의한 DAG입니다. XML 파일에 각 단계(Action)와 성공/실패 시 이동할 경로를 명시합니다. |
| 코디네이터(Coordinator) | 워크플로우에 '언제' 실행될지를 부여합니다. 특이한 점은 시간(Time)뿐만 아니라, 특정 HDFS 경로에 데이터가 존재할 때만 실행되는 '데이터 조건'을 설정할 수 있다는 것입니다. |
| 번들(Bundle) | 여러 코디네이터를 묶어 대규모 프로젝트 단위로 관리하게 해줍니다. |
동작 프로세스:
사용자가 Job을 제출하면 Oozie 서버는 이를 수신하여 내부 DB에 저장합니다.
이후 각 단계를 실행할 때마다 하둡 클러스터에 원격 호출을 보내고, 작업이 완료되면 콜백을 받아 다음 단계로 넘어가는 비동기 루프를 형성합니다.
# DAG 이란 무엇인가?
⇒ 방향성은 있지만, 순환은 존재하지 않는 그래프
⇒ 이를 통해 복잡한 작업을 체계적으로 실행하고, 실패 시 특정 지점부터 재시도할 수 있는 운영 효율성을 얻을 수 있습니다.
Directed (유향성): 모든 작업(Node)은 명확한 선후 관계를 가집니다.
작업 A가 완료되어야 작업 B가 시작될 수 있다는 방향성이 존재하며, 이는 데이터 흐름의 일관성을 보장합니다.
Acyclic (비순환성): 그래프 내에 루프(Loop)가 존재하지 않습니다.
만약 A → B → C → A와 같은 순환 구조가 발생하면, 시스템은 무한 루프에 빠져 영원히 종료되지 않는 '데드락(Deadlock)' 상태가 됩니다. 워크플로우 엔진은 DAG를 파싱하는 단계에서 이러한 순환 참조를 검사하여 실행 전 차단합니다.
Graph (구조화): 각 작업은 노드가 되고, 작업 간의 연결은 간선(Edge)이 됩니다.
엔진은 이 그래프를 탐색하며 실행 가능한 노드(의존성이 모두 충족된 노드)를 찾아 스케줄러에 할당합니다.
# 특징
데이터 무결성을 위한 멱등성 보장:
DAG 설계의 핵심은 멱등성입니다.
특정 날짜의 데이터를 처리하는 DAG가 실패하여 재실행했을 때, 기존 데이터에 중복으로 쌓이지 않고 동일한 결과값을 산출하도록 설계해야 합니다.
이는 주로 'Overwrite' 전략이나 'Partitioning'을 통해 구현됩니다.
실패 지점으로부터의 재시도 (Partial Retries):
DAG 구조 덕분에 전체 파이프라인 중 실패한 노드와 그 하위 노드만 선택적으로 다시 실행할 수 있습니다.
이는 거대한 데이터 레이크 운영에서 컴퓨팅 자원과 시간을 비약적으로 절약해 줍니다.
'3. Data Engineering > ㅤ📘 데이터 웨어하우스' 카테고리의 다른 글
| [Parquet 공식문서] 파케이 개념 및 아키텍처 (0) | 2026.02.28 |
|---|---|
| Airflow, 에어플로우의 기본 개념 (0) | 2026.02.25 |
| impala, 임팔라 엔진의 데이터 검색 (1) | 2026.02.23 |
| Impala, 임팔라의 기본 개념 및 메커니즘 (0) | 2026.02.22 |
| Hadoop과 Hadoop ecosystem 의 기본 개념 (0) | 2026.02.22 |