¿Cómo acceder a Hive a través de Python?

https://cwiki.apache.org/confluence/display/Hive/HiveClient#HiveClient-Python parece estar desactualizado.

Cuando agrego esto a / etc / profile:

export PYTHONPATH=$PYTHONPATH:/usr/lib/hive/lib/py 

Luego puedo realizar las importaciones como se indica en el enlace, con la excepción de la from hive import ThriftHive que en realidad debe ser:

 from hive_service import ThriftHive 

A continuación, el puerto en el ejemplo fue 10000, que cuando lo intenté causó que el progtwig se bloqueara. El puerto predeterminado de Hive Thrift es 9083, que detuvo el locking.

Así que lo configuro así:

 from thrift import Thrift from thrift.transport import TSocket from thrift.transport import TTransport from thrift.protocol import TBinaryProtocol try: transport = TSocket.TSocket('', 9083) transport = TTransport.TBufferedTransport(transport) protocol = TBinaryProtocol.TBinaryProtocol(transport) client = ThriftHive.Client(protocol) transport.open() client.execute("CREATE TABLE test(c1 int)") transport.close() except Thrift.TException, tx: print '%s' % (tx.message) 

Recibí el siguiente error:

 Traceback (most recent call last): File "", line 1, in  File "/usr/lib/hive/lib/py/hive_service/ThriftHive.py", line 68, in execute self.recv_execute() File "/usr/lib/hive/lib/py/hive_service/ThriftHive.py", line 84, in recv_execute raise x thrift.Thrift.TApplicationException: Invalid method name: 'execute' 

Pero la inspección del archivo ThriftHive.py revela el método de ejecución dentro de la clase Cliente.

¿Cómo puedo usar Python para acceder a Hive?

Creo que la forma más fácil es usar PyHive.

Para instalarlas necesitarás estas librerías:

 pip install sasl pip install thrift pip install thrift-sasl pip install PyHive 

Tenga en cuenta que aunque instale la biblioteca como PyHive , importe el módulo como pyhive , todo en minúsculas.

Si está en Linux, es posible que deba instalar SASL por separado antes de ejecutar lo anterior. Instale el paquete libsasl2-dev utilizando apt-get o yum o cualquier administrador de paquetes para su distribución. Para Windows hay algunas opciones en GNU.org, puede descargar un instalador binario. En una Mac, SASL debería estar disponible si ha instalado herramientas de desarrollador de xcode-select --install ( xcode-select --install en Terminal)

Después de la instalación, puedes conectarte a Hive así:

 from pyhive import hive conn = hive.Connection(host="YOUR_HIVE_HOST", port=PORT, username="YOU") 

Ahora que tiene la conexión de la sección, tiene opciones de cómo usarla. Usted puede simplemente hacer una consulta directa:

 cursor = conn.cursor() cursor.execute("SELECT cool_stuff FROM hive_table") for result in cursor.fetchall(): use_result(result) 

… o para usar la conexión para hacer un dataframe Pandas:

 import pandas as pd df = pd.read_sql("SELECT cool_stuff FROM hive_table", conn) 

Afirmo que está utilizando HiveServer2, que es la razón por la que el código no funciona.

Puede usar pyhs2 para acceder a su Hive correctamente y el código de ejemplo así:

 import pyhs2 with pyhs2.connect(host='localhost', port=10000, authMechanism="PLAIN", user='root', password='test', database='default') as conn: with conn.cursor() as cur: #Show databases print cur.getDatabases() #Execute query cur.execute("select * from table") #Return column info from query print cur.getSchema() #Fetch table results for i in cur.fetch(): print i 

Tenga en cuenta que puede instalar python-devel.x86_64 cyrus-sasl-devel.x86_64 antes de instalar pyhs2 con pip.

Ojalá esto pueda ayudarte.

Referencia: https://cwiki.apache.org/confluence/display/Hive/Setting+Up+HiveServer2#SettingUpHiveServer2-PythonClientDriver

El progtwig debajo de python debería funcionar para acceder a las tablas de hive desde python:

  import commands cmd = "hive -S -e 'SELECT * FROM db_name.table_name LIMIT 1;' " status, output = commands.getstatusoutput(cmd) if status == 0: print output else: print "error" 

Puede usar la biblioteca hive, para eso quiere importar la clase hive desde hive import ThriftHive

Prueba este ejemplo:

 import sys from hive import ThriftHive from hive.ttypes import HiveServerException from thrift import Thrift from thrift.transport import TSocket from thrift.transport import TTransport from thrift.protocol import TBinaryProtocol try: transport = TSocket.TSocket('localhost', 10000) transport = TTransport.TBufferedTransport(transport) protocol = TBinaryProtocol.TBinaryProtocol(transport) client = ThriftHive.Client(protocol) transport.open() client.execute("CREATE TABLE r(a STRING, b INT, c DOUBLE)") client.execute("LOAD TABLE LOCAL INPATH '/path' INTO TABLE r") client.execute("SELECT * FROM r") while (1): row = client.fetchOne() if (row == None): break print row client.execute("SELECT * FROM r") print client.fetchAll() transport.close() except Thrift.TException, tx: print '%s' % (tx.message) 

Para conectarse utilizando un nombre de usuario / contraseña y especificando puertos, el código se ve así:

 from pyhive import prest cursor = prest.connect(host='host.example.com', port=8081, username='USERNAME:PASSWORD').cursor() sql = 'select * from table limit 10' cursor.execute(sql) print(cursor.fetchone()) print(cursor.fetchall()) 

Los ejemplos anteriores son un poco fuera de fecha. Un nuevo ejemplo está aquí:

 import pyhs2 as hive import getpass DEFAULT_DB = 'default' DEFAULT_SERVER = '10.37.40.1' DEFAULT_PORT = 10000 DEFAULT_DOMAIN = 'PAM01-PRD01.IBM.COM' u = raw_input('Enter PAM username: ') s = getpass.getpass() connection = hive.connect(host=DEFAULT_SERVER, port= DEFAULT_PORT, authMechanism='LDAP', user=u + '@' + DEFAULT_DOMAIN, password=s) statement = "select * from user_yuti.Temp_CredCard where pir_post_dt = '2014-05-01' limit 100" cur = connection.cursor() cur.execute(statement) df = cur.fetchall() 

Además del progtwig estándar de Python, es necesario instalar algunas bibliotecas para que Python pueda construir la conexión a la base de datos de Hadoop.

1.Pyhs2, controlador de cliente de Python Hive Server 2

2.Sasl, enlaces Cyrus-SASL para Python

3.Thrift, enlaces Python para el sistema RPC de Apache Thrift

4.PyHive, interfaz de Python para Hive

Recuerda cambiar el permiso del ejecutable.

chmod + x test_hive2.py ./test_hive2.py

Ojalá te ayude. Referencia: https://sites.google.com/site/tingyusz/home/blogs/hiveinpython

Similar a la solución de eycheu, pero un poco más detallada.

Aquí hay una solución alternativa específicamente para hive2 que no requiere PyHive o la instalación de paquetes en todo el sistema. Estoy trabajando en un entorno Linux al que no tengo acceso de root, por lo que la instalación de las dependencias SASL como se menciona en la publicación de Tristin no fue una opción para mí:

Si está en Linux, es posible que deba instalar SASL por separado antes de ejecutar lo anterior. Instale el paquete libsasl2-dev utilizando apt-get o yum o cualquier administrador de paquetes para su distribución.

Específicamente, esta solución se enfoca en aprovechar el paquete python: JayDeBeApi. En mi experiencia, todo lo que necesitaba era instalar este paquete adicional sobre la instalación de Python Anaconda 2.7. Este paquete aprovecha java (JDK). Estoy asumiendo que ya está configurado.

Paso 1: Instalar JayDeBeApi

 pip install jaydebeap 

Paso 2: Descargue los controladores apropiados para su entorno :

  • Aquí hay un enlace a los flasks necesarios para un entorno de CDH empresarial.
  • Otra publicación que habla sobre dónde encontrar los controladores jdbc para Apache Hive

Almacena todos los archivos .jar en un directorio. Me referiré a este directorio como / ruta / a / jar / archivos /.

Paso 3: Identifique su mecanismo de autenticación de sistemas:

En las soluciones de pyhive enumeradas, he visto a PLAIN como el mecanismo de autenticación así como a Kerberos. Tenga en cuenta que la URL de su conexión jdbc dependerá del mecanismo de autenticación que esté utilizando. Explicaré la solución Kerberos sin pasar un nombre de usuario / contraseña. Aquí hay más información de autenticación y opciones de Kerberos.

Cree un ticket de Kerberos si aún no se ha creado uno

 $ kinit 

Las entradas se pueden ver a través de klist .

Ahora estás listo para hacer la conexión a través de python:

 import jaydebeapi import glob # Creates a list of jar files in the /path/to/jar/files/ directory jar_files = glob.glob('/path/to/jar/files/*.jar') host='localhost' port='10000' database='default' # note: your driver will depend on your environment and drivers you've # downloaded in step 2 # this is the driver for my environment (jdbc3, hive2, cloudera enterprise) driver='com.cloudera.hive.jdbc3.HS2Driver' conn_hive = jaydebeapi.connect(driver, 'jdbc:hive2://'+host+':' +port+'/'+database+';AuthMech=1;KrbHostFQDN='+host+';KrbServiceName=hive' ,jars=jar_files) 

Si solo te importa leer, entonces puedes leerlo directamente en el dataframe de un panda con facilidad a través de la solución de eycheu:

 import pandas as pd df = pd.read_sql("select * from table", conn_hive) 

De lo contrario, aquí hay una opción de comunicación más versátil:

 cursor = conn_hive.cursor() sql_expression = "select * from table" cursor.execute(sql_expression) results = cursor.fetchall() 

Podría imaginar que, si quisiera crear una tabla, no tendría que “buscar” los resultados, sino que podría enviar una consulta de creación de tablas.

similar a la solución @ python-starter. Pero, el paquete de comandos no está disponible en python3.x. Entonces, la solución alternativa es usar el subproceso en python3.x

 import subprocess cmd = "hive -S -e 'SELECT * FROM db_name.table_name LIMIT 1;' " status, output = subprocess.getstatusoutput(cmd) if status == 0: print(output) else: print("error") 

Es una práctica común prohibir al usuario descargar e instalar paquetes y bibliotecas en nodos de clústeres. En este caso, las soluciones de @ python-starter y @goks funcionan perfectamente, si hive se ejecuta en el mismo nodo. De lo contrario, uno puede usar una herramienta de línea de comandos de línea beeline lugar de hive . Ver detalles

 #python 2 import commands cmd = 'beeline -u "jdbc:hive2://node07.foo.bar:10000/..." -e "SELECT * FROM db_name.table_name LIMIT 1;"' status, output = commands.getstatusoutput(cmd) if status == 0: print output else: print "error" 

.

 #python 3 import subprocess cmd = 'beeline -u "jdbc:hive2://node07.foo.bar:10000/..." -e "SELECT * FROM db_name.table_name LIMIT 1;"' status, output = subprocess.getstatusoutput(cmd) if status == 0: print(output) else: print("error") 

Esto puede ser un truco rápido para conectar hive y python,

 from pyhive import hive cursor = hive.connect('YOUR_HOST_NAME').cursor() cursor.execute('SELECT * from table_name LIMIT 5',async=True) print cursor.fetchall() 

Salida: Lista de tuplas

Este es un enfoque genérico que me lo hace fácil porque me conecto a varios servidores (SQL, Teradata, Hive, etc.) desde Python. Por lo tanto, yo uso el conector pyodbc. Aquí hay algunos pasos básicos para comenzar a usar pyodbc (en caso de que nunca lo hayas usado):

  • Requisito previo: debe tener la conexión ODBC relevante en la configuración de Windows antes de seguir los pasos a continuación. En caso de que no lo tengas, encuentra lo mismo aquí.

Una vez completado: PASO 1. instalación de pip: instalación de pip install pyodbc ( aquí está el enlace para descargar el controlador relevante del sitio web de Microsoft )

PASO 2. ahora, importa lo mismo en tu script de python:

 import pyodbc 

PASO 3. Finalmente, continúe y proporcione los detalles de conexión de la siguiente manera:

 conn_hive = pyodbc.connect('DSN = YOUR_DSN_NAME , SERVER = YOUR_SERVER_NAME, UID = USER_ID, PWD = PSWD' ) 

La mejor parte del uso de pyodbc es que tengo que importar solo un paquete para conectarme a casi cualquier fuente de datos.

pyhs2 ya no se mantiene. Una mejor alternativa es impyla.

No se confunda de que algunos de los ejemplos anteriores sobre Impala; simplemente cambie el puerto a 10000 (predeterminado) para HiveServer2 , y funcionará de la misma manera que con los ejemplos de Impala. Es el mismo protocolo (Thrift) que se usa tanto para Impala como para Hive.

https://github.com/cloudera/impyla

Tiene muchas más funciones sobre pyhs2, por ejemplo, tiene autenticación Kerberos, que es una necesidad para nosotros.

 from impala.dbapi import connect conn = connect(host='my.host.com', port=10000) cursor = conn.cursor() cursor.execute('SELECT * FROM mytable LIMIT 100') print cursor.description # prints the result set's schema results = cursor.fetchall() ## cursor.execute('SELECT * FROM mytable LIMIT 100') for row in cursor: process(row) 

Cloudera está poniendo más esfuerzo ahora en el cliente hs2 https://github.com/cloudera/hs2client que es un cliente Cive C / C ++ HiveServer2 / Impala. Podría ser una mejor opción si envía muchos datos a / desde python. (también tiene el enlace de Python – https://github.com/cloudera/hs2client/tree/master/python )

Un poco más de información sobre impyla:

Podría usar el paquete JayDeBeApi de python para crear una conexión DB-API desde el controlador JDBC de Hive o Impala y luego pasar la conexión a la función pandas.read_sql para devolver datos en el dataframe de pandas.

 import jaydebeapi # Apparently need to load the jar files for the first time for impala jdbc driver to work conn = jaydebeapi.connect('com.cloudera.hive.jdbc41.HS2Driver', ['jdbc:hive2://host:10000/db;AuthMech=1;KrbHostFQDN=xxx.com;KrbServiceName=hive;KrbRealm=xxx.COM', "",""], jars=['/hadp/opt/jdbc/hive_jdbc_2.5.18.1050/2.5.18.1050 GA/Cloudera_HiveJDBC41_2.5.18.1050/HiveJDBC41.jar', '/hadp/opt/jdbc/hive_jdbc_2.5.18.1050/2.5.18.1050 GA/Cloudera_HiveJDBC41_2.5.18.1050/TCLIServiceClient.jar', '/hadp/opt/jdbc/hive_jdbc_2.5.18.1050/2.5.18.1050 GA/Cloudera_HiveJDBC41_2.5.18.1050/commons-codec-1.3.jar', '/hadp/opt/jdbc/hive_jdbc_2.5.18.1050/2.5.18.1050 GA/Cloudera_HiveJDBC41_2.5.18.1050/commons-logging-1.1.1.jar', '/hadp/opt/jdbc/hive_jdbc_2.5.18.1050/2.5.18.1050 GA/Cloudera_HiveJDBC41_2.5.18.1050/hive_metastore.jar', '/hadp/opt/jdbc/hive_jdbc_2.5.18.1050/2.5.18.1050 GA/Cloudera_HiveJDBC41_2.5.18.1050/hive_service.jar', '/hadp/opt/jdbc/hive_jdbc_2.5.18.1050/2.5.18.1050 GA/Cloudera_HiveJDBC41_2.5.18.1050/httpclient-4.1.3.jar', '/hadp/opt/jdbc/hive_jdbc_2.5.18.1050/2.5.18.1050 GA/Cloudera_HiveJDBC41_2.5.18.1050/httpcore-4.1.3.jar', '/hadp/opt/jdbc/hive_jdbc_2.5.18.1050/2.5.18.1050 GA/Cloudera_HiveJDBC41_2.5.18.1050/libfb303-0.9.0.jar', '/hadp/opt/jdbc/hive_jdbc_2.5.18.1050/2.5.18.1050 GA/Cloudera_HiveJDBC41_2.5.18.1050/libthrift-0.9.0.jar', '/hadp/opt/jdbc/hive_jdbc_2.5.18.1050/2.5.18.1050 GA/Cloudera_HiveJDBC41_2.5.18.1050/log4j-1.2.14.jar', '/hadp/opt/jdbc/hive_jdbc_2.5.18.1050/2.5.18.1050 GA/Cloudera_HiveJDBC41_2.5.18.1050/ql.jar', '/hadp/opt/jdbc/hive_jdbc_2.5.18.1050/2.5.18.1050 GA/Cloudera_HiveJDBC41_2.5.18.1050/slf4j-api-1.5.11.jar', '/hadp/opt/jdbc/hive_jdbc_2.5.18.1050/2.5.18.1050 GA/Cloudera_HiveJDBC41_2.5.18.1050/slf4j-log4j12-1.5.11.jar', '/hadp/opt/jdbc/hive_jdbc_2.5.18.1050/2.5.18.1050 GA/Cloudera_HiveJDBC41_2.5.18.1050/zookeeper-3.4.6.jar', '/hadp/opt/jdbc/impala_jdbc_2.5.35/2.5.35.1055 GA/Cloudera_ImpalaJDBC41_2.5.35/ImpalaJDBC41.jar', '/hadp/opt/jdbc/impala_jdbc_2.5.35/2.5.35.1055 GA/Cloudera_ImpalaJDBC41_2.5.35/TCLIServiceClient.jar', '/hadp/opt/jdbc/impala_jdbc_2.5.35/2.5.35.1055 GA/Cloudera_ImpalaJDBC41_2.5.35/commons-codec-1.3.jar', '/hadp/opt/jdbc/impala_jdbc_2.5.35/2.5.35.1055 GA/Cloudera_ImpalaJDBC41_2.5.35/commons-logging-1.1.1.jar', '/hadp/opt/jdbc/impala_jdbc_2.5.35/2.5.35.1055 GA/Cloudera_ImpalaJDBC41_2.5.35/hive_metastore.jar', '/hadp/opt/jdbc/impala_jdbc_2.5.35/2.5.35.1055 GA/Cloudera_ImpalaJDBC41_2.5.35/hive_service.jar', '/hadp/opt/jdbc/impala_jdbc_2.5.35/2.5.35.1055 GA/Cloudera_ImpalaJDBC41_2.5.35/httpclient-4.1.3.jar', '/hadp/opt/jdbc/impala_jdbc_2.5.35/2.5.35.1055 GA/Cloudera_ImpalaJDBC41_2.5.35/httpcore-4.1.3.jar', '/hadp/opt/jdbc/impala_jdbc_2.5.35/2.5.35.1055 GA/Cloudera_ImpalaJDBC41_2.5.35/libfb303-0.9.0.jar', '/hadp/opt/jdbc/impala_jdbc_2.5.35/2.5.35.1055 GA/Cloudera_ImpalaJDBC41_2.5.35/libthrift-0.9.0.jar', '/hadp/opt/jdbc/impala_jdbc_2.5.35/2.5.35.1055 GA/Cloudera_ImpalaJDBC41_2.5.35/log4j-1.2.14.jar', '/hadp/opt/jdbc/impala_jdbc_2.5.35/2.5.35.1055 GA/Cloudera_ImpalaJDBC41_2.5.35/ql.jar', '/hadp/opt/jdbc/impala_jdbc_2.5.35/2.5.35.1055 GA/Cloudera_ImpalaJDBC41_2.5.35/slf4j-api-1.5.11.jar', '/hadp/opt/jdbc/impala_jdbc_2.5.35/2.5.35.1055 GA/Cloudera_ImpalaJDBC41_2.5.35/slf4j-log4j12-1.5.11.jar', '/hadp/opt/jdbc/impala_jdbc_2.5.35/2.5.35.1055 GA/Cloudera_ImpalaJDBC41_2.5.35/zookeeper-3.4.6.jar' ]) # the previous call have initialized the jar files, technically this call needs not include the required jar files impala_conn = jaydebeapi.connect('com.cloudera.impala.jdbc41.Driver', ['jdbc:impala://host:21050/db;AuthMech=1;KrbHostFQDN=xxx.com;KrbServiceName=impala;KrbRealm=xxx.COM',"",""], jars=['/hadp/opt/jdbc/hive_jdbc_2.5.18.1050/2.5.18.1050 GA/Cloudera_HiveJDBC41_2.5.18.1050/HiveJDBC41.jar', '/hadp/opt/jdbc/hive_jdbc_2.5.18.1050/2.5.18.1050 GA/Cloudera_HiveJDBC41_2.5.18.1050/TCLIServiceClient.jar', '/hadp/opt/jdbc/hive_jdbc_2.5.18.1050/2.5.18.1050 GA/Cloudera_HiveJDBC41_2.5.18.1050/commons-codec-1.3.jar', '/hadp/opt/jdbc/hive_jdbc_2.5.18.1050/2.5.18.1050 GA/Cloudera_HiveJDBC41_2.5.18.1050/commons-logging-1.1.1.jar', '/hadp/opt/jdbc/hive_jdbc_2.5.18.1050/2.5.18.1050 GA/Cloudera_HiveJDBC41_2.5.18.1050/hive_metastore.jar', '/hadp/opt/jdbc/hive_jdbc_2.5.18.1050/2.5.18.1050 GA/Cloudera_HiveJDBC41_2.5.18.1050/hive_service.jar', '/hadp/opt/jdbc/hive_jdbc_2.5.18.1050/2.5.18.1050 GA/Cloudera_HiveJDBC41_2.5.18.1050/httpclient-4.1.3.jar', '/hadp/opt/jdbc/hive_jdbc_2.5.18.1050/2.5.18.1050 GA/Cloudera_HiveJDBC41_2.5.18.1050/httpcore-4.1.3.jar', '/hadp/opt/jdbc/hive_jdbc_2.5.18.1050/2.5.18.1050 GA/Cloudera_HiveJDBC41_2.5.18.1050/libfb303-0.9.0.jar', '/hadp/opt/jdbc/hive_jdbc_2.5.18.1050/2.5.18.1050 GA/Cloudera_HiveJDBC41_2.5.18.1050/libthrift-0.9.0.jar', '/hadp/opt/jdbc/hive_jdbc_2.5.18.1050/2.5.18.1050 GA/Cloudera_HiveJDBC41_2.5.18.1050/log4j-1.2.14.jar', '/hadp/opt/jdbc/hive_jdbc_2.5.18.1050/2.5.18.1050 GA/Cloudera_HiveJDBC41_2.5.18.1050/ql.jar', '/hadp/opt/jdbc/hive_jdbc_2.5.18.1050/2.5.18.1050 GA/Cloudera_HiveJDBC41_2.5.18.1050/slf4j-api-1.5.11.jar', '/hadp/opt/jdbc/hive_jdbc_2.5.18.1050/2.5.18.1050 GA/Cloudera_HiveJDBC41_2.5.18.1050/slf4j-log4j12-1.5.11.jar', '/hadp/opt/jdbc/hive_jdbc_2.5.18.1050/2.5.18.1050 GA/Cloudera_HiveJDBC41_2.5.18.1050/zookeeper-3.4.6.jar', '/hadp/opt/jdbc/impala_jdbc_2.5.35/2.5.35.1055 GA/Cloudera_ImpalaJDBC41_2.5.35/ImpalaJDBC41.jar', '/hadp/opt/jdbc/impala_jdbc_2.5.35/2.5.35.1055 GA/Cloudera_ImpalaJDBC41_2.5.35/TCLIServiceClient.jar', '/hadp/opt/jdbc/impala_jdbc_2.5.35/2.5.35.1055 GA/Cloudera_ImpalaJDBC41_2.5.35/commons-codec-1.3.jar', '/hadp/opt/jdbc/impala_jdbc_2.5.35/2.5.35.1055 GA/Cloudera_ImpalaJDBC41_2.5.35/commons-logging-1.1.1.jar', '/hadp/opt/jdbc/impala_jdbc_2.5.35/2.5.35.1055 GA/Cloudera_ImpalaJDBC41_2.5.35/hive_metastore.jar', '/hadp/opt/jdbc/impala_jdbc_2.5.35/2.5.35.1055 GA/Cloudera_ImpalaJDBC41_2.5.35/hive_service.jar', '/hadp/opt/jdbc/impala_jdbc_2.5.35/2.5.35.1055 GA/Cloudera_ImpalaJDBC41_2.5.35/httpclient-4.1.3.jar', '/hadp/opt/jdbc/impala_jdbc_2.5.35/2.5.35.1055 GA/Cloudera_ImpalaJDBC41_2.5.35/httpcore-4.1.3.jar', '/hadp/opt/jdbc/impala_jdbc_2.5.35/2.5.35.1055 GA/Cloudera_ImpalaJDBC41_2.5.35/libfb303-0.9.0.jar', '/hadp/opt/jdbc/impala_jdbc_2.5.35/2.5.35.1055 GA/Cloudera_ImpalaJDBC41_2.5.35/libthrift-0.9.0.jar', '/hadp/opt/jdbc/impala_jdbc_2.5.35/2.5.35.1055 GA/Cloudera_ImpalaJDBC41_2.5.35/log4j-1.2.14.jar', '/hadp/opt/jdbc/impala_jdbc_2.5.35/2.5.35.1055 GA/Cloudera_ImpalaJDBC41_2.5.35/ql.jar', '/hadp/opt/jdbc/impala_jdbc_2.5.35/2.5.35.1055 GA/Cloudera_ImpalaJDBC41_2.5.35/slf4j-api-1.5.11.jar', '/hadp/opt/jdbc/impala_jdbc_2.5.35/2.5.35.1055 GA/Cloudera_ImpalaJDBC41_2.5.35/slf4j-log4j12-1.5.11.jar', '/hadp/opt/jdbc/impala_jdbc_2.5.35/2.5.35.1055 GA/Cloudera_ImpalaJDBC41_2.5.35/zookeeper-3.4.6.jar' ]) import pandas as pd df1 = pd.read_sql("SELECT * FROM tablename", conn) df2 = pd.read_sql("SELECT * FROM tablename", impala_conn) conn.close() impala_conn.close() 

He resuelto el mismo problema con usted, aquí está mi entorno operativo (Sistema: Linux versiones: python 3.6 Paquete: Pyhive) por favor consulte mi respuesta de la siguiente manera:

 from pyhive import hive conn = hive.Connection(host='149.129.***.**', port=10000, username='*', database='*',password="*",auth='LDAP') 

El punto clave es agregar la contraseña de referencia y la autenticación y, mientras tanto, establecer la autenticación igual a ‘LDAP’. Entonces funciona bien, cualquier pregunta por favor hágamelo saber

Mediante el uso del controlador de cliente Python

 pip install pyhs2 

Entonces

 import pyhs2 with pyhs2.connect(host='localhost', port=10000, authMechanism="PLAIN", user='root', password='test', database='default') as conn: with conn.cursor() as cur: #Show databases print cur.getDatabases() #Execute query cur.execute("select * from table") #Return column info from query print cur.getSchema() #Fetch table results for i in cur.fetch(): print i 

Consulte: https://cwiki.apache.org/confluence/display/Hive/Setting+Up+HiveServer2#SettingUpHiveServer2-PythonClientDriver