Big Data/Apache Oozie
Oozie workflow Pattern - 1
Data Engineer
2017. 9. 24. 15:06
해당 포스트는 이전한 블로그에서도 확인할 수 있습니다.
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 패턴에 대해 알아보도록 하겠습니다.
references
- Apache Oozie
- Mark Grover,Ted Malaska,Jonathan Seidman,Gwen Shapira. (2015). Hadoop Application Architectures: Designing Real-World Big Data Applications, O'Reilly Media, Inc.