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잡 디렉토리를 올려주어야 한다.
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 outputDir=${outputRoot} inputY=${inputY} oozie.hive.log.level DEBUG ${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())}]
'프로그래밍 > Hadoop ETC' 카테고리의 다른 글
[HIVE] patition by 쿼리 (0) | 2015.12.08 |
---|---|
[Hadoop] hdfs에 데이터 올라가는 과정 (0) | 2015.08.21 |
[Hadoop] hive 파티션 설정, external table, datatype (0) | 2015.06.13 |
hive 조회 결과 파일로 떨구기 (0) | 2015.06.13 |
MR(mapreduce) with java (0) | 2015.03.28 |