Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
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)