Explore YARN RM cluster status.
authorFrantišek Dvořák <valtri@civ.zcu.cz>
Sun, 8 Mar 2015 12:30:11 +0000 (13:30 +0100)
committerFrantišek Dvořák <valtri@civ.zcu.cz>
Sun, 8 Mar 2015 12:30:11 +0000 (13:30 +0100)
jobs.py

diff --git a/jobs.py b/jobs.py
index 8310448..5766383 100755 (executable)
--- 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_')