여러 아파치 하둡 작업(Map Reduce, Hive, Spark, Sqoop, Pig 등)을 실행하고 관리하는 워크플로우 스케줄러 시스템

Oozie 용어

Action : Oozie에서 실행할 수 있는 작업단위(MapReduce 작업, Spark 작업, Shell script 작업)

Workflow : 기본적 의미는 이전 작업의 출력이 다음 작업의 입력으로 이어지는 것을 말함. Oozie에서 Workflow는 Action들의 제어와 의존 관계를 DAG 형식으로 표한 한다.

Coordinator : Data Sets과 Workflow를 실행하는 스케줄을 정의 한 것.

Bundle : Coordinator의 집합.

 

핵심 기능

Scheduling

  • 특정 시간에 액션 수행
  • 주기적인 간격 이후에 액션 수행
  • 이벤트가 발생하면 액션 수행

Coordinating

  • 이전 액션이 성공적으로 끝나면 다음 액션 시작

Managing

  • 액션이 성공하거나 실패했을 때 이메일 발송
  • 액션 수행시간이나 액션의 단계를 저장

 

워크플로우 노드 유형

시작/종료 제어플로우 노드

Action 노드 : 실제로 처리되는 Task를 정의.

Fork/Join 노드 : 워크플로우에서 Task를 병렬로 실행시킨다.

제어 플로우 노드 : 이전 액션 결과를 기반으로 다음 실행을 위한 판단을 내린다.

 

 

Oozie 실행 과정

1. 클라이언트는 우지 서버에 연결하여 job properties을 제출

  • job properties는 key-value 형태로 작업에 필요한 파라미터를 정의
  • workflow.xml(Action들과 그들을 연결하는 로직은 Workflow를 정의) 파일의 NameNode와 Yarn ResourceManager(혹은 JobTracker)에 대한 URI를 포함하고 있음.

2. 우지 서버가 HDFS로 부터 workflow 파일을 읽는다.

3. 우지 서버에서 workflow를 파싱해서 액션을 수행한다.

 

 

사용 예시

Oozie의 스크립트는 xml로 작성하고 이를 수행하는 방식이다. 아래는 xml 예시파일이다.

<!-- This is a comment -->
<workflow-app xmlns = "uri:oozie:workflow:0.4" name = "simple-Workflow">
   <start to = "Create_External_Table" />

   <!—Step 1 -->
   
   <action name = "Create_External_Table">
      <hive xmlns = "uri:oozie:hive-action:0.4">
         <job-tracker>xyz.com:8088</job-tracker>
         <name-node>hdfs://rootname</name-node>
         <script>hdfs_path_of_script/external.hive</script>
      </hive>
		
      <ok to = "Create_orc_Table" />
      <error to = "kill_job" />
   </action>

   <!—Step 2 -->
   
   <action name = "Create_orc_Table">
      <hive xmlns = "uri:oozie:hive-action:0.4">
         <job-tracker>xyz.com:8088</job-tracker>
         <name-node>hdfs://rootname</name-node>
         <script>hdfs_path_of_script/orc.hive</script>
      </hive>
		
      <ok to = "Insert_into_Table" />
      <error to = "kill_job" />
   </action>

   <!—Step 3 -->
      
   <action name = "Insert_into_Table">
      <hive xmlns = "uri:oozie:hive-action:0.4">
         <job-tracker>xyz.com:8088</job-tracker>
         <name-node>hdfs://rootname</name-node>
         <script>hdfs_path_of_script/Copydata.hive</script>
         <param>database_name</param>
      </hive>
		
      <ok to = "end" />
      <error to = "kill_job" />
   </action>
   
   <kill name = "kill_job">
      <message>Job failed</message>
   </kill>
	
   <end name = "end" />

</workflow-app>

 

이런 Oozie의 스크립트는 DAG 형식으로 표현했을 때 아래와 같다.

 

 

 

출처 : https://seamless.tistory.com/31 [Apache Oozie 알아보기]

출처 : https://www.tutorialspoint.com/apache_oozie/apache_oozie_workflow.htm [Apache Oozie - Workflow]

'좌뇌 > 빅데이터(BigData)' 카테고리의 다른 글

ZooKeeper  (0) 2022.05.19
DB vs DW (데이터베이스와 데이터웨어하우스 차이)  (0) 2022.05.15

+ Recent posts