From 905c41e33ffcb76eaed7f5d33f619a15c5793219 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Franti=C5=A1ek=20Dvo=C5=99=C3=A1k?= Date: Sun, 8 Mar 2015 13:30:11 +0100 Subject: [PATCH] Explore YARN RM cluster status. --- jobs.py | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/jobs.py b/jobs.py index 8310448..5766383 100755 --- a/jobs.py +++ b/jobs.py @@ -3,9 +3,10 @@ import pycurl, json from io import BytesIO +import getopt +import errno import re import sys -import getopt import socket import MySQLdb @@ -74,6 +75,33 @@ def get_rest(base_url, url): return j +def get_cluster_status(base_url): + try: + j = get_rest(base_yarn_url, '/ws/v1/cluster/info') + except pycurl.error: + if c.getinfo(pycurl.OS_ERRNO) == errno.ECONNREFUSED: + j = json.loads('{"clusterInfo":{"state":"NO CONNETION"}}') + else: + raise + + if not j['clusterInfo']: + if debug >= 2: + print 'Error with YARN RM' + return None + + ci = j['clusterInfo'] + if not 'haState' in ci.keys(): + ci['haState'] = 'NONE' + if debug >= 2: + print '[YARN] state=%s, haState=%s' % (ci['state'], ci['haState']) + if ci['state'] != 'STARTED': + return None + if ci['haState'] != 'ACTIVE': + return None + + return j + + def gen_url(base_url, port_nossl, port_ssl): if ssl: schema = 'https://' @@ -179,6 +207,11 @@ if debug >= 2: print '[MR] URL: ' + base_mapred_url print '[YARN] URL: ' + base_yarn_url +j = get_cluster_status(base_yarn_url) +if not j: + print '[YARN] probem with RM' + sys.exit(2) + regJob = re.compile('^job_') regApp = re.compile('^application_') regAtt = re.compile('^attempt_') -- 1.8.2.3