복붙노트

[HADOOP] HTTP 콜백으로 외부 클라이언트가 Oozie 워크 플로우에 알리는 방법

HADOOP

HTTP 콜백으로 외부 클라이언트가 Oozie 워크 플로우에 알리는 방법

Oozie 워크 플로가 3 개의 Java 작업 노드로 시작된 경우를 가정 해 보겠습니다. 각 Java 작업은 Oozie / Hadoop 클러스터 외부의 외부 웹 서비스 (예 : google.com, yahoo.com 등에서 노출 된 일부 웹 서비스)에 대해 비동기 HTTP 호출을 수행합니다. Oozie가 사용자 정의 작업 노드를 지원하기 때문에 이것이 가능하다고 가정합니다.

이제 Oozie가 외부 웹 서비스를 수시로 폴링하여 작업이 외부 웹 서비스에서 수행되는지 확인하고 싶지 않습니다. 외부 웹 서비스를 원합니다 (자유롭게 수정할 수 있다고 가정합니다). 가지다.

이 http://www.infoq.com/articles/ExtendingOozie와 같은 위키는 비동기 노드에 대한 조치에서 콜백에 대해 이야기하지만 비동기 조치 노드에 대한 콜백이 작동하는 실제 샘플은 찾지 못했습니다. 비동기 액션 노드에 대한 콜백이 어떻게 작동하는지 아는 사람이 있습니까?

미리 감사드립니다!

해결법

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

    1.Oozie SSH 작업 구현을 살펴보십시오. 상대적으로 단순하지만 약간 지저분 한 클래스 일 뿐이며 콜백 URL을 만드는 방법을 보여줍니다.

    Oozie SSH 작업 구현을 살펴보십시오. 상대적으로 단순하지만 약간 지저분 한 클래스 일 뿐이며 콜백 URL을 만드는 방법을 보여줍니다.

    String callbackPost = ignoreOutput ? "_" : 
    getOozieConf().get(HTTP_COMMAND_OPTIONS).replace(" ", "%%%");
    
    String callBackUrl = Services.get().get(CallbackService.class)
                    .createCallBackUrl(action.getId(), EXT_STATUS_VAR);
    

    그런 다음 URL은 인수로 쉘 스크립트에 전달됩니다. 스크립트는 나중에 해당 URL에서 curl을 호출합니다. 외부 상태 ID는 예를 들어 콜백을 통해 Oozie로 반환되는 실행 된 프로세스의 PID입니다. 비워 둘 수 없습니다.

    코드를 조사하기로 결정한 경우 힌트 : 코드가 동 기적으로 실행되는 것처럼 보이지만 실제로는 백그라운드에서 셸 스크립트를 실행하여 비동기 적으로 실행됩니다.

    콜백은 Oozie의 CallbackServlet에 의해 처리됩니다.

    dagEngine.processCallback(actionId, callbackService.getExternalStatus(queryString), props);
    
  2. ==============================

    2.IBM DW 기사에 따르면

    IBM DW 기사에 따르면

    CallbackService.java는 콜백 URL을 생성하여 액션으로 전송하고 액션이 콜백 할 때 파싱하기위한 메소드를 가지고 있습니다.

  3. from https://stackoverflow.com/questions/20671386/how-external-clients-notify-oozie-workflow-with-http-callback by cc-by-sa and MIT license