Oozie

오픈소스 비즈니스 컨설팅
둘러보기로 가기 검색하러 가기

Server-based Workflow Engine인 Oozie를 정리 합니다.

Oozie 개요

  • Workflow와 Scheduler 기능 제공

CentOS에서 Oozie 설치

사전 준비 사항

  • Hive 0.11.0
  • Pig 0.11.1
  • Hadoop 1.1.2 (HDFS, MapReduce)
  • Maven 3.0.5
  • Ant 1.7.1
  • Java 1.7.0_19
cd /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/lib
cp /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/lib/tools.jar  .

cd /usr/lib/jvm/jre/bin
ln -s /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/bin/javadoc javadoc
  • CentOS 6.4, 64 bits
  • Oozie에서 사용할 database와 DB user를 생성 합니다.
  • Database : oozie, User : oozie
  • MySQL connector를 다운로드 합니다.
wget http://cdn.mysql.com/Downloads/Connector-J/mysql-connector-java-5.1.25.tar.gz
tar zxvf mysql-connector-java-5.1.25.tar.gz
//--- mysql-connector-java-5.1.25/mysql-connector-java-5.1.25-bin.jar 파일을 사용 합니다.
  • Ext JS를 다운로드 합니다.
wget http://dev.sencha.com/deploy/ext-2.2.1.zip
unzip ext-2.2.1.zip -d ext-2.2.1
mv ext-2.2.1 /appl/extjs

// wget http://cdn.sencha.com/ext/gpl/ext-4.2.1-gpl.zip
// unzip ext-4.2.1-gpl.zip

설치

  • 다운로드 사이트에 oozie를 다운로드한 후 maven을 사용하여 설치를 합니다.
wget http://www.us.apache.org/dist/oozie/3.3.2/oozie-3.3.2.tar.gz
tar zxvf ../oozie-3.3.2.tar.gz

cd oozie-3.3.2
./bin/mkdistro.sh -DskipTests

cd distro/target
tar zxvf ../oozie-3.3.2-distro.tar.gz
mv oozie-3.3.2 /appl/oozie

cd /appl
chown -R root:root oozie
  • oozie.war 파일 생성
export HADOOP_HOME=/appl/hadoop

cd /appl/oozie
//--- Hadoop 1.x 버전을 사용할 경우 0.20.2 를 지정하여 설정 하세요.
./bin/oozie-setup.sh 
    -hadoop 0.20.2 $HADOOP_HOME 
    -extjs /appl/extjs 
    -jars "/cloudnas/install/mysql-connector-java-5.1.25-bin.jar:$HADOOP_HOME/lib/commons-configuration-1.6.jar:$HADOOP_HOME/lib/jackson-core-asl-1.8.8.jar:$HADOOP_HOME/lib/jackson-mapper-asl-1.8.8.jar"
  • Database 접속 정보 설정
  • vi conf/oozie-site.xml
  • oozie.service.JPAService.create.db.schema : true
  • oozie.service.JPAService.jdbc.driver : org.gjt.mm.mysql.Driver
  • oozie.service.JPAService.jdbc.url : jdbc:mysql://localhost:3306/oozie?useUnicode=true&characterEncoding=UTF-8
  • oozie.service.JPAService.jdbc.username : ???
  • oozie.service.JPAService.jdbc.password : ???
  • oozie.db.schema.name : oozie
  • oozie.service.JPAService.pool.max.active.conn : 10
//--- JDBC Driver 복사
cp /cloudnas/install/mysql-connector-java-5.1.25-bin.jar /appl/oozie/libtools

//--- Database Tables 생성
./bin/ooziedb.sh create -sqlfile oozie.sql -run
  • 서비스 확인
./bin/oozied.sh start
ps -ef | grep oozie                        //--- 서비스가 살아 있는지 확인

./bin/oozie admin -oozie http://localhost:11000/oozie -status
//--- "System mode: NORMAL" 메시지 확인
  • 방화벽에서 11000/tcp 포트를 오픈 하여야 접속할 수 있습니다.
  • vi .bashrc
export OOZIE_HOME=/appl/oozie
export PATH=$PATH:$OOZIE_HOME/bin
export OOZIE_URL=http://localhost:11000/oozie

Hadoop 설정

  • vi /appl/hadoop/conf/hdfs-site.xml
  • oozie를 실행하는 Linux User가 oozie일 경우
  • root 사용자로 실행할 경우에는 아래에서 oozie 대신에 root를 기입 하세요.
 <property>
   <name>hadoop.proxyuser.oozie.hosts</name>
   <value>*</value>
 </property>
 <property>
   <name>hadoop.proxyuser.oozie.groups</name>
   <value>*</value>
 </property>
  • MapReduce에서 사용할 라이브러리를 HDFS에 저장
tar zxvf /appl/oozie/oozie-sharelib-3.3.2.tar.gz

start-all.sh             //--- Hadoop가 동작하고 있지 않으면 Hadoop을 기동 합니다.
hadoop dfs -mkdir share
  • Sample로 동작 확인
tar zxvf /appl/oozie/oozie-examples.tar.gz
vi examples/apps/streaming/job.properties
    nameNode=hdfs://localhost:9000              //--- /appl/hadoop/conf/core-site.xml 참조
    jobTracker=localhost:9001                   //--- /appl/hadoop/conf/mapred-site.xml 참조

hadoop dfs -put examples/input-data examples/input-data
hadoop dfs -put examples/apps/streaming/workflow.xml examples/apps/streaming/workflow.xml
hadoop dfs -put examples/apps/streaming/job.properties examples/apps/streaming/job.properties
oozie job -run -config examples/apps/streaming/job.properties

oozie job -info xxxxx
hadoop dfs -ls examples/output-data/streaming

Oozie 매뉴얼

  • Oozie Action
  • Shell
  • JavaAction
  • DistCp
  • MapReduce
  • Pig
  • Hive
  • Oozie Job 작성
  • Oozie Sample 보기
cd /appl/oozie
tar zxvf oozie-examples.tar.gz
//--- examples 폴더에서 Sample 확인 가능
  • vi /appl/oozie/product/workflow001/job.properties
  • 여기서 선언한 변수는 ${var}로 참조할 수 있습니다.
nameNode=hdfs://cloud001.cloudserver.com:9000
jobTracker=cloud001.cloudserver.com:9001
queueName=default

oozie.libpath=/appl/oozie/product/workflow001/lib
oozie.wf.application.path=${nameNode}/appl/oozie/product/workflow/main
  • vi workflow.xml
<workflow-app xmlns="uri:oozie:workflow:0.2" name="aggregator-wf">
   <start to="aggregator"/>
   <action name="aggregator">
       ~
       <ok to="query_node"/>
       <error to="fail"/>
  </action>
   <action name="query_node">
       ~
       <ok to="end"/>
       <error to="fail"/>
  </action>
 
   <kill name="fail">
       <message>Map/Reduce failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
   </kill>
   <end name="end"/>
</workflow-app>
  • Oozie Job 실행
oozie job -run -config /appl/oozie/product/workflow001/job.properties
oozie job -info xxxxx
  • Java에서 Oozie 속성 접근
System.getProperty("oozie.action.output.properties");
  • <captureOuput />

참고 문헌

  • 설치