복붙노트

[HADOOP] oozie 워크 플로에서 루프 처리

HADOOP

oozie 워크 플로에서 루프 처리

필자는 입력 데이터 가용성을 검사하고 데이터 가용성에 따라 mapreduce 작업을 트리거하는 유익한 활용 사례를 가지고 있습니다. 그래서 나는 입력 데이터를 확인하기위한 쉘 스크립트를 작성하고 oozie에서 ssh 액션을 생성했다.

입력 데이터 검사의 재시도 횟수 및 재시도 횟수는 구성 가능해야하며 데이터가 여전히 누락 된 경우 다시 시도한 후에 지정된 재시도 횟수 이후에 경고를 보내야합니다. 사용 가능한 데이터로 시작할 수 있습니다

나는 다음과 같은 작업 흐름을 썼다.

<start to="datacheck" />

<action name="datacheck">
    <ssh xmlns="uri:oozie:ssh-action:0.1">
        <host>${sshUserHost}</host>
        <command>${Oozieutilsscript}</command>
    </ssh>
    <ok to="datacheckswitch" />
    <error to="fail" />
</action>

<decision name="datacheckswitch">
    <switch>
        <case to="mapreduce">${(wf:actionData('datacheck')['datatransfer'] == "complete" )}</case>
        <case to="retry">${(wf:actionData('datacheck')['datatransfer'] == "incomplete" )}</case>        
        <default to="fail" />    
    </switch>
</decision>

<action name="retry">
    <ssh xmlns="uri:oozie:ssh-action:0.1">
        <host>${sshUserHost}</host>
        <command>${Oozieutilsscript1}</command>
    </ssh>
    <ok to="retryswitch" />
    <error to="fail" />
</action>

<decision name="retryswitch">
    <switch>
        <case to="datacheck">${(wf:actionData('datacheck')['retry'] == "notfinished" )}</case>
        <case to="datacheck">${(wf:actionData('datacheck')['retry'] == "finished" )}</case>     
        <default to="fail" />    
    </switch>
</decision>

<action name="mapreduce">
...............
</action>


<!--Kill and End portion-->
<kill name="fail">
    <message>Java failed, error message[${wf:errorMessage(wf:lastErrorNode())}</message>
</kill>
<end name="end" />

워크 플로우를 실행할 때만 워크 플로우가 DAG이므로주기가 지원되지 않는다는 것을 알게되었습니다. 오류가 발생했습니다 : 오류 : E0707 : E0707 : 루프가 구문 분석 할 때 노드 [datacheck]에서 감지되었습니다. workflow.xml을 구문 분석하는 중입니다.

이 유스 케이스를 처리하기위한 다른 접근법이 있습니까?

어떤 도움을 주셔서 감사합니다.

해결법

  1. ==============================

    1.재귀를 사용하여 루프를 시뮬레이션 할 수 있습니다. 핵심 개념은 작업 노드가 작업 노드가 포함 된 워크 플로 파일을 가리키는 하위 워크 플로 작업을 사용하여 자신을 호출한다는 것입니다.

    재귀를 사용하여 루프를 시뮬레이션 할 수 있습니다. 핵심 개념은 작업 노드가 작업 노드가 포함 된 워크 플로 파일을 가리키는 하위 워크 플로 작업을 사용하여 자신을 호출한다는 것입니다.

    재귀는 결정 노드를 사용하여 중지해야합니다.

    내 블로그에서 당신은 이것에 대한 완전한 예를 찾을 수 있습니다.

  2. ==============================

    2.DAG = 지시 비주기 곡선. 즉, 작업 흐름에 의해 형성된 그래프에는 순환 (순환)이 없어야합니다.

    DAG = 지시 비주기 곡선. 즉, 작업 흐름에 의해 형성된 그래프에는 순환 (순환)이 없어야합니다.

    http://en.wikipedia.org/wiki/Directed_acyclic_graph

  3. ==============================

    3.하위 워크 플로우 개념을 사용하여 루프를 구현할 수 있습니다. 아이디어는 하위 플로우로 반복 될 액션을 추출하고 원하는만큼 여러 번 메인 플로우에서 호출하는 것입니다. 더 자세한 내용은 여기를 참조하십시오. 방법 : 오지 워크 플로우 정의 단축

    하위 워크 플로우 개념을 사용하여 루프를 구현할 수 있습니다. 아이디어는 하위 플로우로 반복 될 액션을 추출하고 원하는만큼 여러 번 메인 플로우에서 호출하는 것입니다. 더 자세한 내용은 여기를 참조하십시오. 방법 : 오지 워크 플로우 정의 단축

  4. from https://stackoverflow.com/questions/17684647/handling-loops-in-oozie-workflow by cc-by-sa and MIT license