Beispiel #1
0
 def connect(self):
     self.transport.open()
     protocol = TBinaryProtocol(self.transport)
     service = None
     if six.PY2:
         # ThriftClient == ImpalaHiveServer2Service.Client
         service = ThriftClient(protocol)
     elif six.PY3:
         # ThriftClient == TClient
         # service = ThriftClient(protocol)
         service = ThriftClient(ImpalaHiveServer2Service, protocol)
     service = HS2Service(service, retries=3)
     return hs2.HiveServer2Connection(service, default_db=None)
Beispiel #2
0
def connect(host='localhost',
            port=21050,
            database=None,
            timeout=None,
            use_ssl=False,
            ca_cert=None,
            auth_mechanism='NOSASL',
            user=None,
            password=None,
            kerberos_service_name='impala',
            use_ldap=None,
            ldap_user=None,
            ldap_password=None,
            use_kerberos=None,
            protocol=None):
    # pylint: disable=too-many-locals
    if use_kerberos is not None:
        warn_deprecate('use_kerberos', 'auth_mechanism="GSSAPI"')
        if use_kerberos:
            auth_mechanism = 'GSSAPI'

    if use_ldap is not None:
        warn_deprecate('use_ldap', 'auth_mechanism="LDAP"')
        if use_ldap:
            auth_mechanism = 'LDAP'

    if auth_mechanism:
        auth_mechanism = auth_mechanism.upper()
    else:
        auth_mechanism = 'NOSASL'

    if auth_mechanism not in AUTH_MECHANISMS:
        raise NotSupportedError(
            'Unsupported authentication mechanism: {0}'.format(auth_mechanism))

    if ldap_user is not None:
        warn_deprecate('ldap_user', 'user')
        user = ldap_user

    if ldap_password is not None:
        warn_deprecate('ldap_password', 'password')
        password = ldap_password

    if protocol is not None:
        if protocol.lower() == 'hiveserver2':
            warn_protocol_param()
        else:
            raise NotSupportedError(
                "'{0}' is not a supported protocol; only HiveServer2 is "
                "supported".format(protocol))

    service = hs2.connect(host=host,
                          port=port,
                          timeout=timeout,
                          use_ssl=use_ssl,
                          ca_cert=ca_cert,
                          user=user,
                          password=password,
                          kerberos_service_name=kerberos_service_name,
                          auth_mechanism=auth_mechanism)
    return hs2.HiveServer2Connection(service, default_db=database)
Beispiel #3
0
def connect(host='localhost', port=21050, database=None, timeout=None,
            use_ssl=False, ca_cert=None, auth_mechanism='NOSASL', user=None,
            password=None, kerberos_service_name='impala', use_ldap=None,
            ldap_user=None, ldap_password=None, use_kerberos=None,
            protocol=None,username=None):
    """Get a connection to HiveServer2 (HS2).

    These options are largely compatible with the impala-shell command line
    arguments. See those docs for more information.

    Parameters
    ----------
    host : str
        The hostname for HS2. For Impala, this can be any of the `impalad`s.
    port : int, optional
        The port number for HS2. The Impala default is 21050. The Hive port is
        likely different.
    database : str, optional
        The default database. If `None`, the result is
        implementation-dependent.
    timeout : int, optional
        Connection timeout in seconds. Default is no timeout.
    use_ssl : bool, optional
        Enable SSL.
    ca_cert : str, optional
        Local path to the the third-party CA certificate. If SSL is enabled but
        the certificate is not specified, the server certificate will not be
        validated.
    auth_mechanism : {'NOSASL', 'PLAIN', 'GSSAPI', 'LDAP'}
        Specify the authentication mechanism. `'NOSASL'` for unsecured Impala.
        `'PLAIN'` for unsecured Hive (because Hive requires the SASL
        transport). `'GSSAPI'` for Kerberos and `'LDAP'` for Kerberos with
        LDAP.
    user : str, optional
        LDAP user, if applicable.
    password : str, optional
        LDAP password, if applicable.
    kerberos_service_name : str, optional
        Authenticate to a particular `impalad` service principal. Uses
        `'impala'` by default.
    use_ldap : bool, optional
        Specify `auth_mechanism='LDAP'` instead.

        .. deprecated:: 0.11.0
    ldap_user : str, optional
        Use `user` parameter instead.

        .. deprecated:: 0.11.0
    ldap_password : str, optional
        Use `password` parameter instead.

        .. deprecated:: 0.11.0
    use_kerberos : bool, optional
        Specify `auth_mechanism='GSSAPI'` instead.

        .. deprecated:: 0.11.0
    protocol : str, optional
        Do not use.  HiveServer2 is the only protocol currently supported.

        .. deprecated:: 0.11.0


    Returns
    -------
    HiveServer2Connection
        A `Connection` object (DB API 2.0-compliant).
    """
    # pylint: disable=too-many-locals
    if use_kerberos is not None:
        warn_deprecate('use_kerberos', 'auth_mechanism="GSSAPI"')
        if use_kerberos:
            auth_mechanism = 'GSSAPI'

    if use_ldap is not None:
        warn_deprecate('use_ldap', 'auth_mechanism="LDAP"')
        if use_ldap:
            auth_mechanism = 'LDAP'

    if auth_mechanism:
        auth_mechanism = auth_mechanism.upper()
    else:
        auth_mechanism = 'NOSASL'

    if auth_mechanism not in AUTH_MECHANISMS:
        raise NotSupportedError(
            'Unsupported authentication mechanism: {0}'.format(auth_mechanism))

    if ldap_user is not None:
        warn_deprecate('ldap_user', 'user')
        user = ldap_user

    if ldap_password is not None:
        warn_deprecate('ldap_password', 'password')
        password = ldap_password

    if protocol is not None:
        if protocol.lower() == 'hiveserver2':
            warn_protocol_param()
        else:
            raise NotSupportedError(
                "'{0}' is not a supported protocol; only HiveServer2 is "
                "supported".format(protocol))

    service = hs2.connect(host=host, port=port,
                          timeout=timeout, use_ssl=use_ssl,
                          ca_cert=ca_cert, user=user, password=password,
                          kerberos_service_name=kerberos_service_name,
                          auth_mechanism=auth_mechanism)
    return hs2.HiveServer2Connection(service, default_db=database, impersonate=username)
Beispiel #4
0
def connect(host='localhost',
            port=21050,
            database=None,
            timeout=None,
            use_ssl=False,
            ca_cert=None,
            auth_mechanism='NOSASL',
            user=None,
            password=None,
            kerberos_service_name='impala',
            use_ldap=None,
            ldap_user=None,
            ldap_password=None,
            use_kerberos=None,
            protocol=None,
            krb_host=None,
            use_http_transport=False,
            http_path='',
            auth_cookie_names=['impala.auth', 'hive.server2.auth'],
            retries=3):
    """Get a connection to HiveServer2 (HS2).

    These options are largely compatible with the impala-shell command line
    arguments. See those docs for more information.

    Parameters
    ----------
    host : str
        The hostname for HS2. For Impala, this can be any of the `impalad`s.
    port : int, optional
        The port number for HS2. The Impala default is 21050. The Hive port is
        likely different.
    database : str, optional
        The default database. If `None`, the result is
        implementation-dependent.
    timeout : int, optional
        Connection timeout in seconds. Default is no timeout.
    use_ssl : bool, optional
        Enable SSL.
    ca_cert : str, optional
        Local path to the the third-party CA certificate. If SSL is enabled but
        the certificate is not specified, the server certificate will not be
        validated.
    auth_mechanism : {'NOSASL', 'PLAIN', 'GSSAPI', 'LDAP'}
        Specify the authentication mechanism. `'NOSASL'` for unsecured Impala.
        `'PLAIN'` for unsecured Hive (because Hive requires the SASL
        transport). `'GSSAPI'` for Kerberos and `'LDAP'` for Kerberos with
        LDAP.
    user : str, optional
        LDAP user, if applicable.
    password : str, optional
        LDAP password, if applicable.
    kerberos_service_name : str, optional
        Authenticate to a particular `impalad` service principal. Uses
        `'impala'` by default.
    use_ldap : bool, optional
        Specify `auth_mechanism='LDAP'` instead.
    use_http_transport: bool optional
        Set it to True to use http transport of False to use binary transport.
    http_path: str, optional
        Specify the path in the http URL. Used only when `use_http_transport` is True.
    auth_cookie_names: list of str or str, optional
        Specify the list of possible names for the cookie used for cookie-based
        authentication. If the list of names contains one cookie name only, a str value
        can be specified instead of a list.
        Used only when `use_http_transport` is True.
        By default 'auth_cookie_names' is set to the list of auth cookie names used by
        Impala and Hive.
        If 'auth_cookie_names' is explicitly set to an empty value (None, [], or ''),
        Impyla won't attempt to do cookie based authentication.
        Currently cookie-based authentication is only supported for GSSAPI over http.

        .. deprecated:: 0.11.0
    ldap_user : str, optional
        Use `user` parameter instead.

        .. deprecated:: 0.11.0
    ldap_password : str, optional
        Use `password` parameter instead.

        .. deprecated:: 0.11.0
    use_kerberos : bool, optional
        Specify `auth_mechanism='GSSAPI'` instead.

        .. deprecated:: 0.11.0
    protocol : str, optional
        Do not use.  HiveServer2 is the only protocol currently supported.

        .. deprecated:: 0.11.0


    Returns
    -------
    HiveServer2Connection
        A `Connection` object (DB API 2.0-compliant).
    """
    # pylint: disable=too-many-locals
    if use_kerberos is not None:
        warn_deprecate('use_kerberos', 'auth_mechanism="GSSAPI"')
        if use_kerberos:
            auth_mechanism = 'GSSAPI'

    if use_ldap is not None:
        warn_deprecate('use_ldap', 'auth_mechanism="LDAP"')
        if use_ldap:
            auth_mechanism = 'LDAP'

    if auth_mechanism:
        auth_mechanism = auth_mechanism.upper()
    else:
        auth_mechanism = 'NOSASL'

    if auth_mechanism not in AUTH_MECHANISMS:
        raise NotSupportedError(
            'Unsupported authentication mechanism: {0}'.format(auth_mechanism))

    if ldap_user is not None:
        warn_deprecate('ldap_user', 'user')
        user = ldap_user

    if ldap_password is not None:
        warn_deprecate('ldap_password', 'password')
        password = ldap_password

    if protocol is not None:
        if protocol.lower() == 'hiveserver2':
            warn_protocol_param()
        else:
            raise NotSupportedError(
                "'{0}' is not a supported protocol; only HiveServer2 is "
                "supported".format(protocol))

    service = hs2.connect(host=host,
                          port=port,
                          timeout=timeout,
                          use_ssl=use_ssl,
                          ca_cert=ca_cert,
                          user=user,
                          password=password,
                          kerberos_service_name=kerberos_service_name,
                          auth_mechanism=auth_mechanism,
                          krb_host=krb_host,
                          use_http_transport=use_http_transport,
                          http_path=http_path,
                          auth_cookie_names=auth_cookie_names,
                          retries=retries)
    return hs2.HiveServer2Connection(service, default_db=database)
Beispiel #5
0
def connect(host='localhost',
            port=21050,
            protocol=None,
            database=None,
            timeout=45,
            use_ssl=False,
            ca_cert=None,
            auth_mechanism='NOSASL',
            user=None,
            password=None,
            kerberos_service_name='impala',
            use_ldap=None,
            ldap_user=None,
            ldap_password=None,
            use_kerberos=None):
    if use_kerberos is not None:
        warn_deprecate('use_kerberos', 'auth_mechanism="GSSAPI"')
        if use_kerberos:
            auth_mechanism = 'GSSAPI'

    if use_ldap is not None:
        warn_deprecate('use_ldap', 'auth_mechanism="LDAP"')
        if use_ldap:
            auth_mechanism = 'LDAP'

    if auth_mechanism:
        auth_mechanism = auth_mechanism.upper()
    else:
        auth_mechanism = 'NOSASL'

    if auth_mechanism not in AUTH_MECHANISMS:
        raise NotSupportedError(
            'Unsupported authentication mechanism: {0}'.format(auth_mechanism))

    if ldap_user is not None:
        warn_deprecate('ldap_user', 'user')
        user = ldap_user

    if ldap_password is not None:
        warn_deprecate('ldap_password', 'password')
        password = ldap_password

    if protocol is None or protocol.lower() == 'hiveserver2':
        if protocol:
            warn_deprecate_protocol()
        service = hs2.connect(host=host,
                              port=port,
                              timeout=timeout,
                              use_ssl=use_ssl,
                              ca_cert=ca_cert,
                              user=user,
                              password=password,
                              kerberos_service_name=kerberos_service_name,
                              auth_mechanism=auth_mechanism)
        return hs2.HiveServer2Connection(service, default_db=database)
    if protocol.lower() == 'beeswax':
        warn_deprecate_hs2()
        service = beeswax.connect(host=host,
                                  port=port,
                                  timeout=timeout,
                                  use_ssl=use_ssl,
                                  ca_cert=ca_cert,
                                  user=user,
                                  password=password,
                                  kerberos_service_name=kerberos_service_name,
                                  auth_mechanism=auth_mechanism)
        return beeswax.BeeswaxConnection(service, default_db=database)
    raise NotSupportedError("The specified protocol '%s' is not supported." %
                            protocol)
 def connect(self):
     self.transport.open()
     protocol = TBinaryProtocolAccelerated(self.transport)
     service = ThriftClient(protocol)
     service = HS2Service(service, retries=3)
     return hs2.HiveServer2Connection(service, default_db=None)