2017-08-27 1 views
11

verbinden, während zu Hive2 Verbindungs ​​Python mit folgendem Code:kann nicht Hive2 mit Python

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 

ich unten Störung erhalte:

File 
"C:\Users\vinbhask\AppData\Roaming\Python\Python36\site-packages\pyhs2-0.6.0-py3.6.egg\pyhs2\connections.py", 
line 7, in <module> 
    from cloudera.thrift_sasl import TSaslClientTransport ModuleNotFoundError: No module named 'cloudera' 

versucht haben here und here aber Problem war nicht aufgelöst.

Hier ist die bisher installierten Pakete:

bitarray0.8.1,certifi2017.7.27.1,chardet3.0.4,cm-api16.0.0,cx-Oracle6.0.1,future0.16.0,idna2.6,impyla0.14.0,JayDeBeApi1.1.1,JPype10.6.2,ply3.10,pure-sasl0.4.0,PyHive0.4.0,pyhs20.6.0,pyodbc4.0.17,requests2.18.4,sasl0.2.1,six1.10.0,teradata15.10.0.21,thrift0.10.0,thrift-sasl0.2.1,thriftpy0.3.9,urllib31.22 

Fehler beim Impyla mit:

Traceback (most recent call last): 
File "C:\Users\xxxxx\AppData\Local\Programs\Python\Python36-32\Scripts\HiveConnTester4.py", line 1, in <module> 
from impala.dbapi import connect 
File "C:\Users\xxxxx\AppData\Local\Programs\Python\Python36-32\lib\site-packages\impala\dbapi.py", line 28, in <module> 
import impala.hiveserver2 as hs2 
File "C:\Users\xxxxx\AppData\Local\Programs\Python\Python36-32\lib\site-packages\impala\hiveserver2.py", line 33, in <module> 
from impala._thrift_api import (
File "C:\Users\xxxxx\AppData\Local\Programs\Python\Python36-32\lib\site-packages\impala\_thrift_api.py", line 74, in <module> 
include_dirs=[thrift_dir]) 
File "C:\Users\xxxxx\AppData\Local\Programs\Python\Python36-32\lib\site-packages\thriftpy\parser\__init__.py", line 30, in load 
include_dir=include_dir) 
File "C:\Users\xxxxx\AppData\Local\Programs\Python\Python36-32\lib\site-packages\thriftpy\parser\parser.py", line 496, in parse 
url_scheme)) 
thriftpy.parser.exc.ThriftParserError: ThriftPy does not support generating module with path in protocol 'c' 
+0

Ich bin erstaunt, dass so viele Menschen plötzlich über PyHive beklagen (die zur Zeit gebrochen * [August 2017] *) und PyHS2 (was man deutlich kann nicht arbeiten). Versuchen Sie stattdessen ImPyla. Es wird von Cloudera gepflegt. Und es funktioniert. –

+0

@SamsonScharfrichter: Ich hatte es auch in Impyla versucht, das Fehlerprotokoll wie oben aktualisiert – Vinod

+0

Wie wäre es mit PySpark? –

Antwort

1

thrift_sasl.py ist cStringIO versucht, die nicht mehr in Python 3.0 verfügbar ist. Versuchen Sie es mit Python 2?

+0

Wir haben eine Anforderung zu verwenden python3 + – Vinod

+0

pysh2 wird nicht mehr gepflegt. Versuchen Sie es mit PyHive? – Xire

1

Möglicherweise müssen Sie eine nicht freigegebene Version von thrift_sasl installieren. Versuchen:

pip install git+https://github.com/cloudera/thrift_sasl 
+0

@Vinod war dies hilfreich? – Tagar

+0

Ich erhalte diesen Fehler "Verbindung zum github.com-Port 443 konnte nicht hergestellt werden: Zeitüberschreitung" – Vinod

+0

Der letzte Fehler weist darauf hin, dass Sie sich hinter einer Firewall befinden. Deshalb erhalten Sie eine Zeitüberschreitung beim Zugriff auf Port 443. Ändern Sie https: ' zu 'http:' und versuchen Sie es erneut - Port 80 könnte offen sein. – Tagar

0

Wenn Sie angenehme Lern ​​PySpark sind, dann brauchen Sie nur zum Einrichten des hive.metastore.uris Eigentum an der Hive Metastore Adresse zu zeigen, und Sie sind bereit zu gehen.

Der einfachste Weg, dies zu tun wäre, die hive-site.xml von Ihrem Cluster zu exportieren, dann --files hive-site.xml während spark-submit übergeben.

(ich habe nicht versucht, eigenständigen Pyspark läuft, so YMMV)