Oozie Workflow Pattern - 1
Oozie가 무엇인지 궁금한 분들을 Apache Oozie 소개라는 이전 포스트를 참고하시기 바랍니다. 일반적으로 Oozie에서 많이 사용되는 워크플로우 패턴에 대해서 알아봅시다.
순차적 액션 수행 (Point-to-Point Pattern)
가장 간단한 형태로 수행하는 워크플로우 형태가 되겠습니다. 말그대로 순차적으로 액션을 수행할 때 사용합니다. 예제를 한번 살펴볼까요?
간단한 예제입니다. 예제 워크플로우의 모습은 아래와 같습니다. 하이브를 사용하여 데이터 셋에 대한 집계를 수행한 후 스쿱을 사용하여 RDBMS로 내보내는 워크플로우입니다.
이와 같은 패턴을 Oozie의 workflow.xml로 나타내면 다음과 같습니다.
<workflow-app xmlns="uri:oozie:workflow:0.4" name="aggregate_and_load">
<!-- 1 -->
<global>
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
</global>
<!-- 2 -->
<start to="aggregate" />
<!-- 3 -->
<action name="aggregate">
<hive xmlns="uri:oozie:hive-action:0.5">
<job-xml>hive-site.xml</job-xml>
<script>populate_agg_table.sql</script>
</hive>
<ok to="sqoop-export" />
<error to="kill" />
</action>
<!-- 4 -->
<action name="sqoop_export">
<sqoop xmlns="uri:oozie:sqoop-action:0.4">
<arg>export</arg>
<arg>--connect</arg>
<arg>jdbc:oracle:thin:@//orahost:1521/oracle</arg>
<arg>--username</arg>
<arg>scott</arg>
<arg>--password</arg>
<arg>tiger</arg>
<arg>--table</arg>
<arg>mytable</arg>
<arg>--export-dir</arg>
<arg>/etl/BI/clickstream/aggregate-preferences/output</arg>
</sqoop>
<ok to="end" />
<error to="kill" />
</action>
<!-- 5 -->
<kill name="kill">
<message> Workflow failed. Error message
[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<!-- 6 -->
<end name="end" />
</workflow-app>
그러면 한번 oozie workflow.xml 파일을 한번 살펴볼까요?
상세히 알아보기 위해서 주석으로 번호를 달아났습니다. 그럼 번호별로 살펴볼게요.
-
Global configuration
액션마다 중복된 설정들을 global configuration을 통해 한 곳에 설정할 수 있습니다. global로 설정되는 것들은 job-xml, configuration, job-tracker, name-node 등이 있습니다. -
Start control node
워크플로우의 시작 포인트입니다. 워크플로우 내에 가장 먼저 시작해야할 액션을 지정해줍니다. 여기서는 aggregate가 워크플로우에서 시작 액션입니다. -
Hive action
우지에서 하이브 잡을 실행시켜줄 수 있는 하이브 액션입니다. -
Sqoop action
우지에서 스쿱 잡을 실행시켜주는 스쿱 액션입니다. -
Kill control node
워크플로우가 잡이 실패를 하는 경우 실행됩니다. kill node는 어떠한 에러를 발생했는지 정보를 메세지로 전달해줍니다. -
End control node
End 노드는 워크플로우가 성공적으로 완료되었을 때 수행되는 마지막 플로우입니다.
Oozie action 종류
위의 예제에서 간단히 살펴봤듯이 우지에서는 다양한 액션을 지원합니다. 위의 예제에서는 하이브 액션과 스쿱 액션이 우지에서 지원하는 액션들 중 하나였습니다. 그럼 우지에서 지원하는 액션의 종류에 대해 살펴보도록 하겠습니다. 우지에서 지원하는 액션은 아래와 같습니다.
Actions
- Map-Reduce action : Hadoop의 Map-Reduce job을 실행하는 액션입니다.
- Pig action : Pig job을 실행하는 액션입니다.
- Fs (HDFS) action : HDFS의 파일 시스템을 조작하는 액션입니다.
- Sub-workflow action : child workflow 잡을 수행하는 액션입니다.
- Java action : 자바 클래스의 메인 메소드를 수행하는 액션입니다.
Action Extensions
- Email action : 이메일을 보내는 액션입니다.
- Shell action : Shell command를 실행하는 액션입니다.
- Hive action : Hive job을 실행하는 액션입니다.
- Sqoop action : Sqoop job을 실행하는 액션입니다.
- Ssh action : ssh를 이용하여 remote machine에 shell command를 수행합니다.
- Distcp action : Hadoop의 distcp를 수행해주는 액션입니다.
- Spark action : Spark job을 수행하는 액션입니다.
- Custom action : 사용자가 직접 액션을 작성할 수 있습니다. 직접 Custom action을 작성하고 싶은 경우 Custom Action Nodes 문서를 참고하시기 바랍니다.
다음 포스트에서는 Oozie workflow의 fork-and-join 패턴에 대해 알아보도록 하겠습니다.