'oozie'에 해당되는 글 1건

  1. 2015.06.17 [Hadoop] OOZIE 사용 (with hive, sqoop)
프로그래밍/Hadoop ETC 2015. 6. 17. 23:12
OOZIE는 하둡 잡을 스케쥴링하는 코디네이터 역할을 한다. 정해진 시간 스케쥴과, 특정 작업 workflow를 만들 수 있다. 예를 들면 MR잡으로 부터 나온 결과를 Mysql 로 넣는다던지, 중간에 가공을 한번 더 거치는 java 잡을 거친는 작업등을 스케쥴링 가능하다.

cloudera manager 및 oozie를 hdfs와 연동 및 설치하는 과정은 생략한다. 

참조 문서 : https://cwiki.apache.org/confluence/display/OOZIE/Map+Reduce+Cookbook

구성 :  workflow.xml, coordinator.xml , job.properties lib/ 각종 lib 파일들

명령 : 

1 ) hadoop fs -put OOZIE workflow 디렉토리 hdfs://hdfs주소/tmp/test_oozie <- oozie잡 또한 MR의 한 프로세스로 돌아가므로 hdfs 상에 올려주고, 실행한다.

2 ) oozie job -oozie http://hdfs주소:oozieport/oozie -config job.properties위치 -run   <- oozie 잡을 서브밋 하게 된다.
oozie 잡들은 hdfs 상에서 작동하므로 먼저 oozie잡 디렉토리를 올려주어야 한다. 



job.properties 속성.
jobTracker=***** 

nameNode=hdfs://******  <-- hdfs 도메인

workflowApplicationPath=${nameNode}/workflow디렉토리 <- 서브밋한 잡 path

oozie.coord.application.path=${workflowApplicationPath}/coordinator.xml  <- 코디네이터 파일(여기서 시간간격 등을 조절 가능하다.

oozie.use.system.libpath=true

oozie.libpath=${workflowApplicationPath}/lib  <- oozie job에 들어가는 mr jar 파일이 될 수도 있고 mysql jdbc jar 등이 위치하는 path

### coordinator name ###

coordNameSuffix=20150115 

### about time ###

timeoutCoord=10

concurrencyCoord=2

startDate=2015-01-15T12:40+0900   <-- job을 실행시킬 시작 시간 

endDate=2022-01-01T00:00+0900  <-- job을 종료시킬시간

inputInitialTime=2015-01-15T11:40+0900  <-- input 데이터의 입력시간. 즉 job 시작시간 이전으로 설정함으로 써 한시간 이전 데이터를 읽어 들이겠다는 의미.

outputInitialTime=2015-01-15T11:40+0900 

timezoneCoord=Asia/Seoul 

timezoneDataSet=Asia/Seoul

instanceIndex=-1  

coordFrequency=1

inputFrequency=1

outputFrequency=1

### path ###

InputPath= hdfs상의 input data위치

outputPath= hdfs상의 output data 위치 

### delete conf ###

deleteTmp=false

###  mapred.map.tasks value ###

maxSplitSize=33554432 

아래와 같이 RDB로 넣기 위해 db커넥션 정보도 넣었다.

jdbcUrl=

jdbcUsername=

jdbcPassword=

tableName=

filenamePattern=part-r-000*
##################### coordinator.xml ########################
아래 들어가는 ${ xxx } 는 위 job.properties 에서 읽어들이는 것이다.



    

        ${timeoutCoord}

        ${concurrencyCoord}

    

      <----- input data 의 주기 및 데이터 위치 등을 셋팅 해준다.

        

            ${inputPath}/${YEAR}/${MONTH}/${DAY}/${HOUR}

            

        

        

            ${outputPath}/${YEAR}/${MONTH}/${DAY}/${HOUR}

${YEAR}, 등은 OOZIE에서 지원한다. 

        

    

       

        

            ${coord:current(instanceIndex)}

        

    

    

        

            ${coord:current(instanceIndex)}

        

    

    

        

            ${workflowApplicationPath}/workflow.xml

            

                

                    queueName

                    default

                

                

                    inputRoot

                    ${coord:dataIn('input')}

                

                

                    outputRoot

                    ${coord:dataOut('output')}

                

                

                    inputYMDH

                    ${coord:formatTime(coord:dateOffset(coord:nominalTime(), inputFrequency*instanceIndex, 'HOUR'),'yyyyMMddHH')}

                

            

        

    



##################### workflow.xml ########################





        

  

        

            ${jobTracker}

            ${nameNode}

            ${workflowApplicationPath}/hive/hive-site.xml

            

                

                    oozie.hive.log.level

                    DEBUG

                

            

                

            outputDir=${outputRoot}

            inputY=${inputY}           

        

        

        

    

    

        

            ${fs:exists(outputRoot) == "true"} 

            

        

    

   
        
            ${jobTracker}
            ${nameNode}
            
                
                    oozie.sqoop.log.level
                    DEBUG
                
            
            export
            --connect
            ${jdbcURL}
            --username
            ${jdbcUsername}
            --password
            ${jdbcPassword}
            -m
            3
            --table
            ${exportTableName}
            --map-column-java                      
            DATE_IDX=java.sql.Date,column1=Integer,column2=Long
            --columns              
   DATE_IDX, column1, column2
            --input-fields-terminated-by
            \001
            --export-dir
            ${outputRoot}
        
        
        
    
    
    failed, error message[${wf:errorMessage(wf:lastErrorNode())}]
    



//