Apache Oozie 튜토리얼: 워크플로 다이어그램, 스케줄러
⚡ 스마트 요약
Apache Oozie는 Hadoop용 워크플로 스케줄러로, 종속적인 작업을 방향성 비순환 그래프(DAG)로 실행합니다. 이는 MapReduce, Pig 및 Hive 작업을 위한 워크플로 엔진과 시간 및 데이터 가용성에 따라 작동하는 코디네이터 엔진을 결합한 것입니다.

아파치 오지(Apache Oozie)란 무엇인가요?
Apache Oozie는 워크플로 스케줄러입니다. 하둡이는 종속 작업들의 워크플로우를 실행하는 시스템입니다. 사용자는 워크플로우의 방향성 비순환 그래프(DAG)를 생성할 수 있으며, 이 그래프는 하둡에서 병렬 및 순차적으로 실행될 수 있습니다.
두 부분으로 구성됩니다.
- 워크플로우 엔진: 워크플로 엔진의 역할은 Hadoop 작업으로 구성된 워크플로를 저장하고 실행하는 것입니다. 예를 들어, MapReduce, 돼지, 하이브.
- 코디네이터 엔진: 이 시스템은 미리 정의된 일정과 데이터 가용성에 따라 워크플로우 작업을 실행합니다.
Oozie는 확장성이 뛰어나 Hadoop 클러스터에서 수천 개의 워크플로(각 워크플로는 수십 개의 작업으로 구성됨)를 적시에 실행할 수 있습니다. 아래 다이어그램은 스케줄러가 클러스터 및 스케줄러가 관리하는 작업과 어떤 관계에 있는지 보여줍니다.
Oozie는 유연성 또한 뛰어납니다. 작업을 쉽게 시작, 중지, 일시 중단 및 재실행할 수 있으며, 실패한 워크플로우를 간편하게 재실행할 수 있습니다. 시스템 다운타임이나 장애로 인해 누락되거나 실패한 작업을 따라잡는 것이 얼마나 어려운지 쉽게 이해할 수 있습니다. 특정 노드의 실패를 건너뛰는 것도 가능합니다.
프로젝트 현황: Apache Oozie는 Apache Software에서 더 이상 지원되지 않습니다. Foundation 2025년 2월과 그 이전은 Apache Attic 2025년 4월에 완료될 예정이었지만, 최종 릴리스 버전은 2021년 2월에 출시된 5.2.1이며, 소스 저장소는 현재 읽기 전용입니다. 기존 클러스터에서는 여전히 해당 버전이 실행되고 있으므로 아래 작동 방식을 알아두는 것이 유용하지만, 새로운 파이프라인은 일반적으로 Apache Airflow를 기반으로 구축됩니다.
Oozie는 어떻게 작동하나요?
Oozie는 클러스터에서 서비스로 실행되며, 클라이언트는 즉시 또는 추후 처리를 위해 워크플로 정의를 제출합니다.
Oozie 워크플로는 액션 노드와 제어 흐름 노드로 구성됩니다.
액션 노드는 워크플로 작업을 나타냅니다. 예를 들어 파일을 특정 위치로 이동하는 작업 등이 있습니다. HDFSMapReduce, Pig 또는 Hive 작업을 실행하거나 데이터를 가져오는 경우 스쿱또는 셸 스크립트나 프로그램 실행 Java.
제어 흐름 노드는 조건 논리와 같은 구조를 허용함으로써 작업 간 워크플로 실행을 제어합니다. 이를 통해 이전 작업 노드의 결과에 따라 다른 분기를 따를 수 있습니다.
시작 노드, 종료 노드 및 오류 노드는 이러한 노드 범주에 속합니다.
- 시작 노드 워크플로 작업의 시작을 지정합니다.
- 끝 노드 작업이 끝났음을 알립니다.
- 오류 노드 오류 발생 여부와 출력될 해당 오류 메시지를 지정합니다.
워크플로 실행이 완료되면 Oozie는 HTTP 콜백을 사용하여 클라이언트에 워크플로 상태를 업데이트합니다. 액션 노드 진입 또는 종료 시에도 콜백이 트리거될 수 있습니다.
Oozie 제어 노드 및 액션 유형
시작, 종료 및 오류 외에도 워크플로 XML은 그래프의 형태를 결정하는 몇 가지 제어 노드를 지원합니다.
- 결정: 표현식을 평가하고 워크플로를 여러 분기 중 하나로 보냅니다. 이는 switch 문과 동일한 기능을 합니다.
- 포크: 경로를 분할하여 두 개 이상의 작업이 병렬로 실행되도록 합니다.
- 가입하다: 일치하는 분기의 모든 분기가 완료될 때까지 기다린 후 다음 분기로 진행합니다.
- 죽임: 워크플로를 즉시 종료하고 오류 메시지를 기록합니다.
액션 노드는 작업 자체를 다루며, 각 액션 노드는 고유한 XML 요소를 가지고 있습니다.
- 맵리듀스, 피그, 하이브, 스쿱 해당 작업은 상응하는 Hadoop 작업을 실행합니다.
- 자바 클러스터에서 메인 클래스를 실행합니다. 껍질 SSH 스크립트를 실행합니다.
- fs HDFS 하우스키핑을 수행합니다ping 이동, 삭제, 디렉토리 생성, 권한 변경 등의 명령어가 있습니다.
- 이메일 수신자에게 알립니다. 하위 워크플로 다른 워크플로 애플리케이션을 호출합니다.
예제 워크플로 다이어그램
아래 그림 trac이는 시작 노드에서 MapReduce 액션을 거쳐 최종 노드 또는 액션 실패 시 오류 경로에 이르는 작은 워크플로입니다.
오지 관련 직업 유형
Oozie는 작업을 세 단계로 설명합니다. 각 단계는 아래 단계를 감싸므로, 궁극적으로 하나의 번들이 여러 개별 워크플로우를 제어합니다.
| 직종 | 그것이 정의하는 것 | 발동되다 |
|---|---|---|
| 워크플로우 | workflow.xml 파일에 작성된 액션 및 제어 노드의 방향성 비순환 그래프 | 수동 제출 또는 담당자 |
| 조정자 | 시작 시간, 종료 시간 및 빈도를 포함하는 하나의 워크플로에 대한 반복 일정입니다. | 시계 시간 및 입력 데이터 가용성 |
| 묶음 | 여러 코디네이터 애플리케이션이 하나의 데이터 파이프라인으로 통합 관리됩니다. | 시작 시간은 모든 담당자에게 적용되었습니다. |
실제로는 이러한 구분이 중요합니다. 워크플로는 "무엇이 실행되는가"에 대한 답을 제시하고, 코디네이터는 "언제 실행되는가"에 대한 답을 제시하며, 번들은 "무엇이 함께 시작하고 함께 끝나는가"에 대한 답을 제시합니다.
Oozie 워크플로우 애플리케이션 패키징 및 배포
워크플로 애플리케이션은 워크플로 정의와 MapReduce Jar 파일, Pig 스크립트 등과 같은 모든 관련 리소스로 구성됩니다. 애플리케이션은 간단한 디렉터리 구조를 따라야 하며 Oozie가 접근할 수 있도록 HDFS에 배포됩니다.
아래는 디렉토리 구조의 예입니다.
<name of workflow>/
├── lib/
│ └── hadoop-examples.jar
└── workflow.xml
워크플로 정의 파일인 workflow.xml은 최상위 디렉터리(워크플로 이름이 포함된 상위 디렉터리)에 있어야 합니다. lib 디렉터리에는 MapReduce 클래스가 포함된 Jar 파일이 있습니다. 이러한 구조를 따르는 워크플로 애플리케이션은 Ant 또는 Maven과 같은 빌드 도구를 사용하여 빌드할 수 있습니다.
예를 들어 다음과 같은 명령어를 사용하여 해당 빌드 파일을 HDFS에 복사해야 합니다.
% hadoop fs -put hadoop-examples/target/<name of workflow dir> name of workflow
Oozie 워크플로우 작업 실행 단계
이 섹션에서는 워크플로 작업을 실행하는 방법을 살펴보겠습니다. 이를 실행하기 위해 Oozie 명령줄 도구(Oozie 서버와 통신하는 클라이언트 프로그램)를 사용합니다.
1. OOZIE_를 내보내기URL 환경 변수는 Oozie 명령어에 사용할 Oozie 서버를 알려줍니다(여기서는 로컬에서 실행 중인 서버를 사용합니다).
% export OOZIE_URL="http://localhost:11000/oozie"
2. 워크플로우 작업을 실행하려면 다음 명령어를 사용하십시오.
% oozie job -config ch05/src/main/resources/max-temp-workflow.properties -run
-config 옵션은 로컬을 나타냅니다. Java 워크플로 XML 파일의 매개 변수에 대한 정의가 포함된 속성 파일과 Oozie에게 HDFS에서 워크플로 애플리케이션의 위치를 알려주는 oozie.wf.application.path.
속성 파일의 내용 예:
nameNode=hdfs://localhost:8020 jobTracker=localhost:8021 oozie.wf.application.path=${nameNode}/user/${user.name}/<name of workflow>
3. 워크플로 작업의 상태를 확인합니다.
워크플로 작업의 상태는 'job' 하위 명령에 '-info' 옵션을 사용하고 '-info' 뒤에 작업 ID를 지정하여 확인할 수 있습니다.
e.g., % oozie job -info <job id>
출력 결과에는 RUNNING, KILLED 또는 SUCCEEDED 중 하나의 상태가 표시됩니다.
4. 워크플로 실행이 성공적으로 완료되면 다음과 같은 Hadoop 명령어를 사용하여 결과를 확인할 수 있습니다.
% hadoop fs -cat <location of result>
Oozie를 사용하는 이유는 무엇입니까?
Oozie를 사용하는 주된 목적은 Hadoop 시스템에서 처리되는 다양한 유형의 작업을 관리하는 것입니다.
사용자는 방향성 비순환 그래프(DAG) 형태로 작업 간의 종속성을 지정합니다. Oozie는 이 정보를 활용하여 워크플로에 지정된 순서대로 작업을 실행합니다. 이를 통해 사용자는 전체 워크플로를 관리하는 데 소요되는 시간을 절약할 수 있습니다. 또한 Oozie는 특정 작업의 실행 빈도를 지정하는 기능도 제공합니다.
오지의 특징
- Oozie는 클라이언트 API와 명령줄 인터페이스를 제공하여 웹 브라우저에서 작업을 시작, 제어 및 모니터링할 수 있습니다. Java 응용 프로그램.
- 웹 서비스 API를 사용하면 어디에서든 작업을 제어할 수 있습니다.
- Oozie에는 주기적으로 실행되도록 예약된 작업을 실행하는 기능이 있습니다.
- Oozie에는 작업 완료 시 이메일 알림을 보내는 기능이 있습니다.
Oozie vs Apache Airflow
Oozie가 더 이상 사용되지 않기 때문에 오늘날 스케줄러를 평가하는 대부분의 팀은 기존에 사용 중인 도구와 Apache Airflow를 비교합니다. 두 도구는 서로 다른 방향에서 동일한 문제를 해결합니다.
| 아래 | 아파치 오지 | 아파치 에어 플로우 |
|---|---|---|
| 정의 언어 | XML로 작성된 워크플로 | DAG는 다음과 같이 작성됩니다. Python 암호 |
| 범위 | MapReduce, Pig, Hive, Sqoop 등의 Hadoop 액션을 중심으로 구축되었습니다. | 클라우드 서비스, 데이터베이스 및 컨테이너용 연산자를 포함하는 범용 도구입니다. |
| 예약 | 시간 및 데이터 가용성에 따라 결정되는 코디네이터 직무 | 일정 간격과 외부 조건을 기다리는 센서 |
| 프로젝트 상태 | 2025년에 아파치 다락방으로 은퇴; 최종 릴리스 5.2.1 | 활발하게 개발 중인 아파치 최상위 프로젝트 |
이미 Oozie가 실행 중인 클러스터에서는 Oozie가 더 간단한 옵션입니다. Oozie의 액션이 Hadoop 구성 요소에 일대일로 매핑되기 때문입니다. Airflow는 특히 파이프라인이 Hadoop을 넘어서는 경우와 같이 새로운 작업을 시작할 때 실용적인 선택입니다.


