class ImpalaDaemonApi(object): def __init__(self, server_url): self._url = server_url self._client = HttpClient(self._url, logger=LOG) # You can set username/password for Impala Web UI which overrides kerberos if DAEMON_API_USERNAME.get() is not None and DAEMON_API_PASSWORD.get() is not None: self._client.set_digest_auth(DAEMON_API_USERNAME.get(), DAEMON_API_PASSWORD.get()) self._root = Resource(self._client) self._security_enabled = False self._thread_local = threading.local() def __str__(self): return "ImpalaDaemonApi at %s" % self._url @property def url(self): return self._url @property def security_enabled(self): return self._security_enabled @property def user(self): return self._thread_local.user def set_user(self, user): if hasattr(user, 'username'): self._thread_local.user = user.username else: self._thread_local.user = user def get_queries(self): params = { 'json': 'true' } resp = self._root.get('queries', params=params) try: if isinstance(resp, basestring): return json.loads(resp) else: return resp except ValueError, e: raise ImpalaDaemonApiException('ImpalaDaemonApi did not return valid JSON: %s' % e)
class ImpalaDaemonApi(object): def __init__(self, server_url): self._url = server_url self._client = HttpClient(self._url, logger=LOG) # You can set username/password for Impala Web UI which overrides kerberos if DAEMON_API_USERNAME.get() is not None and DAEMON_API_PASSWORD.get( ) is not None: self._client.set_digest_auth(DAEMON_API_USERNAME.get(), DAEMON_API_PASSWORD.get()) self._root = Resource(self._client) self._security_enabled = False self._thread_local = threading.local() def __str__(self): return "ImpalaDaemonApi at %s" % self._url @property def url(self): return self._url @property def security_enabled(self): return self._security_enabled @property def user(self): return self._thread_local.user def set_user(self, user): if hasattr(user, 'username'): self._thread_local.user = user.username else: self._thread_local.user = user def get_queries(self): params = {'json': 'true'} resp = self._root.get('queries', params=params) try: if isinstance(resp, basestring): return json.loads(resp) else: return resp except ValueError, e: raise ImpalaDaemonApiException( 'ImpalaDaemonApi did not return valid JSON: %s' % e)
class ImpalaDaemonApi(object): def __init__(self, server_url): self._url = server_url self._client = HttpClient(self._url, logger=LOG) self._root = Resource(self._client) self._security_enabled = is_kerberos_enabled() self._webserver_spnego_enabled = is_webserver_spnego_enabled() self._thread_local = threading.local() # You can set username/password for Impala Web UI which overrides kerberos if DAEMON_API_USERNAME.get() is not None and DAEMON_API_PASSWORD.get( ) is not None: if DAEMON_API_AUTH_SCHEME.get().lower() == 'basic': self._client.set_basic_auth(DAEMON_API_USERNAME.get(), DAEMON_API_PASSWORD.get()) LOG.info( "Using username and password for basic authentication") else: self._client.set_digest_auth(DAEMON_API_USERNAME.get(), DAEMON_API_PASSWORD.get()) LOG.info( 'Using username and password for digest authentication') elif self._webserver_spnego_enabled or self._security_enabled: self._client.set_kerberos_auth() LOG.info('Using kerberos principal for authentication') def __str__(self): return "ImpalaDaemonApi at %s" % self._url @property def url(self): return self._url @property def security_enabled(self): return self._security_enabled @property def user(self): return self._thread_local.user def set_user(self, user): if hasattr(user, 'username'): self._thread_local.user = user.username else: self._thread_local.user = user def get_queries(self): params = {'json': 'true'} resp = self._root.get('queries', params=params) try: if isinstance(resp, basestring): return json.loads(resp) else: return resp except ValueError as e: raise ImpalaDaemonApiException( 'ImpalaDaemonApi did not return valid JSON: %s' % e) def get_query(self, query_id): params = {'query_id': query_id, 'json': 'true'} resp = self._root.get('query_plan', params=params) try: if isinstance(resp, basestring): return json.loads(resp) else: return resp except ValueError as e: raise ImpalaDaemonApiException( 'ImpalaDaemonApi did not return valid JSON: %s' % e) def get_query_profile(self, query_id): params = {'query_id': query_id, 'json': 'true'} resp = self._root.get('query_profile', params=params) try: if isinstance(resp, basestring): return json.loads(resp) else: return resp except ValueError as e: raise ImpalaDaemonApiException( 'ImpalaDaemonApi query_profile did not return valid JSON: %s' % e) def get_query_memory(self, query_id): params = {'query_id': query_id, 'json': 'true'} resp = self._root.get('query_memory', params=params) try: if isinstance(resp, basestring): return json.loads(resp) else: return resp except ValueError as e: raise ImpalaDaemonApiException( 'ImpalaDaemonApi query_memory did not return valid JSON: %s' % e) def kill(self, query_id): params = {'query_id': query_id, 'json': 'true'} resp = self._root.get('cancel_query', params=params) try: if isinstance(resp, basestring): return json.loads(resp) else: return resp except ValueError as e: raise ImpalaDaemonApiException( 'ImpalaDaemonApi kill did not return valid JSON: %s' % e) def get_query_backends(self, query_id): params = {'query_id': query_id, 'json': 'true'} resp = self._root.get('query_backends', params=params) try: if isinstance(resp, basestring): return json.loads(resp) else: return resp except ValueError as e: raise ImpalaDaemonApiException( 'ImpalaDaemonApi query_backends did not return valid JSON: %s' % e) def get_query_finstances(self, query_id): params = {'query_id': query_id, 'json': 'true'} resp = self._root.get('query_finstances', params=params) try: if isinstance(resp, basestring): return json.loads(resp) else: return resp except ValueError as e: raise ImpalaDaemonApiException( 'ImpalaDaemonApi query_finstances did not return valid JSON: %s' % e) def get_query_summary(self, query_id): params = {'query_id': query_id, 'json': 'true'} resp = self._root.get('query_summary', params=params) try: if isinstance(resp, basestring): return json.loads(resp) else: return resp except ValueError as e: raise ImpalaDaemonApiException( 'ImpalaDaemonApi query_summary did not return valid JSON: %s' % e) def get_query_profile_encoded(self, query_id): params = {'query_id': query_id} return self._root.get('query_profile_encoded', params=params)