본문 바로가기
빅데이터/oozie

[oozie] FS 액션을 이용하여 작업 완료용 0바이트 파일 만들기

by hs_seo 2017. 1. 25.

우지를 이용하여 하둡, 하이브 액션을 처리할때 

HDFS나 S3에 작업이 처리 되었음을 알리기 위하여 0byte의 파일을 생성해야 할 때가 있다. 


이럴때 hadoop의 touchz 명령을 이용하면 0byte의 파일을 생성할 수 있다. 

* 이는 리눅스의 touch 명령과 동일하다. 


우지 워크플로우의 fs 액션은 이작업을 기본적으로 제공하기 때문에 

따로 쉘커맨드나 파이썬 액션을 만들지 않아도 처리가 가능하다. 


fs 액션은 다음의 기본 명령을 제공한다. 

- move , delete , mkdir , chmod , touchz, chgrp



[fs 액션 문법]

<workflow-app name="[WF-DEF-NAME]" xmlns="uri:oozie:workflow:0.5">

    ...

    <action name="[NODE-NAME]">

        <fs>

            <delete path='[PATH]'/>

            ...

            <mkdir path='[PATH]'/>

            ...

            <move source='[SOURCE-PATH]' target='[TARGET-PATH]'/>

            ...

            <chmod path='[PATH]' permissions='[PERMISSIONS]' dir-files='false' />

            ...

            <touchz path='[PATH]' />

            ...

            <chgrp path='[PATH]' group='[GROUP]' dir-files='false' />

        </fs>

        <ok to="[NODE-NAME]"/>

        <error to="[NODE-NAME]"/>

    </action>

    ...

</workflow-app>


[예제1]

<workflow-app name="sample-wf" xmlns="uri:oozie:workflow:0.5">

    ...

    <action name="hdfscommands">

         <fs>

            <delete path='hdfs://foo:8020/usr/tucu/temp-data'/>

            <mkdir path='archives/${wf:id()}'/>

            <move source='${jobInput}' target='archives/${wf:id()}/processed-input'/>

            <chmod path='${jobOutput}' permissions='-rwxrw-rw-' dir-files='true'><recursive/></chmod>

            <chgrp path='${jobOutput}' group='testgroup' dir-files='true'><recursive/></chgrp>

        </fs>

        <ok to="myotherjob"/>

        <error to="errorcleanup"/>

    </action>

    ...

</workflow-app>


[예제2]

<workflow-app xmlns="uri:oozie:workflow:0.5" name="sample">

    <start to="fs_touchz" />

    <action name="fs_touchz" retry-max="2" retry-interval="5">

        <fs>

            <touchz path='s3://usr-bucket/${runDate}/${runTime}.end' />

        </fs>

        <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>



반응형