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

[oozie] python을 이용하여 우지 WebService API 호출하기

by hs_seo 2016. 10. 10.

우지는 REST API로 잡목록 확인, 잡수행을 위한 웹서비스 API를 제공한다. 



HTTP를 이용하여 우지 콘솔 명령을 수행할 수 있으므로

이를 이용하여 잡 모니터링, 수행이 가능하다. 


- 잡 목록 확인

http://주소/oozie/v1/jobs?jobtype=coord&len=10000&filter=status=RUNNING


- 잡 정보 확인

http://주소/oozie/v1/job/[워크플로우|코디에티어ID]?show=info&len=10000


기본적인 API는 위와 같다. 
  * 우지에서 제공하는 DOC에서 정보 확인이 가능하고, 조건등을 자세하게 확인하기 어렵다면 
    우지에서 기본적으로 제공하는 웹콘솔의 동작을 크롬의 개발자도구 등을 이용하여 네트워크를 감시하여 확인하여도 된다. 

파이썬은 simplejson 모듈을 이용하여 간단하게 처리가 가능하다. 
반환값이 json 형태이므로 정보를 손쉽게 확인이 가능하다. 





#!/usr/bin/python

# -*- coding: utf-8 -*-

import urllib, json

from datetime import datetime


OOZIE_URL = "http://localhost:11000"


class Workflow():


    def __init__(self, wf_info):

        self.wf_info = wf_info


    def __getitem__(self, key):

        return self.wf_info[key]


    def __str__(self):

        return json.dumps(self.wf_info, indent=4, sort_keys=True)


def send_url(request_url):

    '''

    request url 을 호출하여 json

    '''

    json_obj = json.loads(urllib.urlopen(request_url).read())

    print(request_url)

    print(json.dumps(json_obj, indent=4, sort_keys=True))

    return json_obj


# 잡 목록 

def get_job_list(job_type, job_status):

    request_url = "{oozie_url}/oozie/v1/jobs?".format(oozie_url= OOZIE_URL)

    filter_list = [ 'len=10000', 'jobtype='+job_type, 'filter=status='+job_status ]

    url = "{request_url}{filter_list}".format(request_url=request_url, filter_list="&".join(filter_list))

    

    return send_url(url)


def get_running_coord_list():

    get_job_list('coord', 'RUNNING')


def get_running_wf_list():

    get_job_list('wf', 'RUNNING')


def get_killed_wf_list():

    get_job_list('wf', 'KILLED')


def get_killed_wf_job_list():

    return get_job_list('wf', 'KILLED')


# 잡의 정보 

def get_job_info(job_id):

    request_url = '{oozie_url}/oozie/v1/job/{job_id}?show=info&len=10000'.format(oozie_url= OOZIE_URL, job_id = job_id)

    return send_url(request_url)


def main():

    #get_killed_wf_list()

    #get_job_info('C-ID')

    #get_job_info('W-ID')

    get_delay_wf_job_list()

    #get_killed_wf_job_list()


if __name__ == '__main__':

    main()


반응형