2014-02-07 3 views
0

나는 각각의 작업이 마지막 작업의 출력에 의존하는 일련의 작업을 실행하는 코디네이터를 oozie에두고 있습니다. 각 작업은 날짜가 폴더를 출력하고 아무것도 다른 실행 없을 때이 모두가 내 dev에 클러스터에서 잘 작동Oozie의 엄격한 코디네이터 작업 주문

${coord:latest(0)} 

를 사용하여 이전 모델의 출력을 찾습니다; 5 분마다 오지가 다른 작업을 대기열에 넣었고 5 분 동안 이전 작업이 실행되어 새로운 작업이 설정되면 필요한 디렉토리가 표시됩니다.

프로덕션 클러스터에서 문제가 발생합니다. 작업은 제출되지만 대기열에 저장되고 잠시 동안 실행되지는 않지만 여전히 5 분마다 다른 대기열이 대기열에 포함되며 초기화 단계에서 이전에 할당되지 않은 '이전'폴더가 할당됩니다 이전 버전이 실행되지 않았으므로 '최신'기능은 이전 작업과 동일한 입력을 제공합니다. 그런 다음 모두 동일한 입력을받는 10 개의 작업으로 끝납니다.

내가 필요한 것은 코디네이터 시퀀스의 다음 작업이 이전 작업이 완료 될 때까지 생성되지 않도록 엄격하게 방지하는 방법입니다. 이 작업을 수행 할 수있는 방법이 있습니까?

감사합니다.

+0

공동 주 (co-oord)에 지정한 빈도는 얼마입니까? –

+0

이러한 예제를 살펴 보겠습니다. https://github.com/yahoo/oozie/wiki/Oozie-Coord-Use-Cases 최선의 아이디어인지는 모르지만 myabe에서는 'Coordinator Job With Timeouts'을 사용할 수 있습니다. 예를 들어 타임 아웃을 설정하고 동일한 작업을 쌓아 버리는 경우 –

+0

죄송합니다. 중요한 정보가 누락되었습니다. 빈도는 매일로 설정되지만 가져올 이전 데이터 백 로그가 있으므로 예약 작업이 그것들의 명목상의 실행 시간은 과거와 같습니다. – user1111284

답변

1

Oozie가 해결하도록 설계 한 정확한 사용 사례입니다. Oozie는 출시 전 모든 데이터 종속성을 기다립니다. 입력 이벤트에서 "현재 (-1) COORD"이전의 출력을 의미한다

당신의 coordinator.xml

<datasets> 
     <dataset name="my_data" frequency="${coord:days(1)}" initial-instance="2013-01-27T00:00Z"> 
      <uri-template>YOUR_DATA/${YEAR}${MONTH}${DAY}</uri-template> 
     </dataset> 
    ... 
    <datasets> 

    <input-events> 
     <data-in name="my_data" dataset="my_data"> 
      <instance>${coord:current(-1)}</instance> 
     </data-in> 
    </input-events> 

    <output-events> 
     <data-out name="my_data" dataset="my_data"> 
      <instance>${coord:current(0)}</instance> 
     </data-out> 
    </output-events> 

(가)에서 다음 CONFIGS을 이해하려고 노력하십시오. 데이터 세트 URI 팀을 "어제"로 해석하고 Oozie는 출력 플래그 바로 아래에 "_SUCCESS"라는 빈 파일 인 성공 플래그를 검사하여 HDFS에 데이터가 존재하는지 확인합니다. Oozie는 현재 워크 플로를 시작하기 전에이 플래그를 기다리게됩니다.

BTW, 당신은 또한 시작 시간과 코디네이터 작업의 종료 시간을 정의하는

<coordinator-app name="my_coordinator" frequency="${coord:days(1)}" start="${start_time}" end="${end_time}" ...> 

을 설정할 수 있습니다, 그래서 당신은 백 로그 데이터를 잡을 수 있습니다.

+0

우리는 'coord : current (-1)'를 사용해 보았지만 주어진 날짜에 항상 데이터를 사용할 수 있다고 보장 할 수는 없습니다.이 경우 이전 날의 출력으로 되돌아 가고 싶습니다. 따라서 'coord : latest (0) '이다. 여러 작업이 구체화되는 경우 이전 작업이 완료되고 잘못된 입력이 선택되기 전에이 작업이 평가됩니다. materialisation을 규제하는 것은 불가능한 것처럼 보이므로 나머지 프로세스를이 방법과 호환되도록 재구성해야합니다. – user1111284

+0

나는 시나리오를 이해하려고 노력하지만 조금 혼란 스럽다. 새 작업이 이전 작업 출력에 의존하면 어떻게 병렬 처리 할 수 ​​있습니까? 백 로그 데이터를 따라 잡을 필요가없는 경우, 출력을 다른 위치로 복사 해보고 해당 위치를 전체 워크 플로의 유일한 입력으로 사용 했습니까? 이 위치는 최신 결과 만 저장한다는 의미입니다. – Wenzhong

+0

각 작업은 이전 작업 출력에 따라 다르지만 이전 작업이 이전 날에 성공적으로 실행되었음을 보장 할 수 없으므로 'coord : latest (0)'폴더가 필요합니다. 각 작업은 단일 공용 폴더에 데이터를 출력 할 수 있지만 실행하려는 최신 작업이 완료되었는지 확인할 수있는 방법이 필요합니다. – user1111284

관련 문제