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 파일을 한번 살펴볼까요?
상세히 알아보기 위해서 주석으로 번호를 달아났습니다. 그럼 번호별로 살펴볼게요.

  1. Global configuration
    액션마다 중복된 설정들을 global configuration을 통해 한 곳에 설정할 수 있습니다. global로 설정되는 것들은 job-xml, configuration, job-tracker, name-node 등이 있습니다.

  2. Start control node
    워크플로우의 시작 포인트입니다. 워크플로우 내에 가장 먼저 시작해야할 액션을 지정해줍니다. 여기서는 aggregate가 워크플로우에서 시작 액션입니다.

  3. Hive action
    우지에서 하이브 잡을 실행시켜줄 수 있는 하이브 액션입니다.

  4. Sqoop action
    우지에서 스쿱 잡을 실행시켜주는 스쿱 액션입니다.

  5. Kill control node
    워크플로우가 잡이 실패를 하는 경우 실행됩니다. kill node는 어떠한 에러를 발생했는지 정보를 메세지로 전달해줍니다.

  6. End control node
    End 노드는 워크플로우가 성공적으로 완료되었을 때 수행되는 마지막 플로우입니다.

Oozie action 종류

위의 예제에서 간단히 살펴봤듯이 우지에서는 다양한 액션을 지원합니다. 위의 예제에서는 하이브 액션과 스쿱 액션이 우지에서 지원하는 액션들 중 하나였습니다. 그럼 우지에서 지원하는 액션의 종류에 대해 살펴보도록 하겠습니다. 우지에서 지원하는 액션은 아래와 같습니다.

Actions

Action Extensions

다음 포스트에서는 Oozie workflow의 fork-and-join 패턴에 대해 알아보도록 하겠습니다.

Reference



comments powered by Disqus