2015-06-08 19 views
8

Ho provato l'uso l'esempio a https://cwiki.apache.org/confluence/display/Hive/Setting+Up+HiveServer2 ma ottiene i seguenti errori:pitone non può collegarsi hiveserver2

/usr/lib/python2.7/dist-packages/pkg_resources.py:1031: UserWarning: /home/dsnadmin/.python-eggs is writable by group/others and vulnerable to attack when used with get_resource_filename. Consider a more secure location (set with .set_extraction_path or the PYTHON_EGG_CACHE environment variable). 
    warnings.warn(msg, UserWarning) 
Traceback (most recent call last): 
    File "hs2.py", line 8, in <module> 
    database='default') as conn: 
    File "build/bdist.linux-x86_64/egg/pyhs2/__init__.py", line 7, in connect 
    File "build/bdist.linux-x86_64/egg/pyhs2/connections.py", line 46, in __init__ 
    File "build/bdist.linux-x86_64/egg/pyhs2/cloudera/thrift_sasl.py", line 66, in open 
thrift.transport.TTransport.TTransportException: Could not start SASL: Error in sasl_client_start (-4) SASL(-4): no mechanism available: No worthy mechs found 

Qui è il ceppo alveare:

ERROR [HiveServer2-Handler-Pool: Thread-31]: server.TThreadPoolServer (TThreadPoolServer.java:run(296)) - Error occurred during processing of message. 
java.lang.RuntimeException: org.apache.thrift.transport.TSaslTransportException: No data or no sasl data in the stream 
     at org.apache.thrift.transport.TSaslServerTransport$Factory.getTransport(TSaslServerTransport.java:219) 
     at org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:268) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
     at java.lang.Thread.run(Thread.java:745) 
Caused by: org.apache.thrift.transport.TSaslTransportException: No data or no sasl data in the stream 
     at org.apache.thrift.transport.TSaslTransport.open(TSaslTransport.java:328) 
     at org.apache.thrift.transport.TSaslServerTransport.open(TSaslServerTransport.java:41) 
     at org.apache.thrift.transport.TSaslServerTransport$Factory.getTransport(TSaslServerTransport.java:216) 

Qualcuno può aiutare a risolvere il problema? Grazie mille. Versione

OS: Ubuntu 14.04.1
versione Hive: apache-hive-1.2.0
versione SASL: sasl-0.1.3
Thrift versione: la parsimonia-0.9.1

+0

È il vostro HiveServer2 Kerberos, o in un gruppo protetto? – javabrett

+0

In hive-site.xml, ho impostato hive.server2.authentication NONE lun

+0

È solo l'unico computer che non è possibile connettere, o tutte le macchine? – javabrett

risposta

12

È mancano alcune dipendenze, assicurarsi di installare cyrus-sasl-devel e cyrus-sasl-gssapi:

Su una distro RHEL-based:

sudo yum install cyrus-sasl-devel cyrus-sasl-gssapi cyrus-sasl-md5 cyrus-sasl-plain

... o su una distro basata su Debian:

sudo apt-get install sasl2-bin libsasl2-2 libsasl2-dev libsasl2-modules

Per @KenKennedy, aggiungere anche il pacchetto libsasl2-modules-gssapi-mit se si utilizza GSSAPI per l'autenticazione.

+0

Tuttavia, per i server Ubuntu, non hanno 'cyrus-sasl-devel' e' cyrus-sasl-gssapi'. Ho appena trovato e installato alcuni pacchetti probabili: 'sasl2-bin',' libsasl2-2', 'libsasl2-dev' – lun

+0

Grazie, aggiunto i dettagli del pacchetto per due tipi di pacchetti distro. Se questo ora sembra corretto, sentiti libero di accettare quella risposta. – javabrett

+0

Ci scusiamo per questo, dopo aver installato questi pacchetti, gli errori esistono ancora ...Pyhs2 lib per python per connettere hiveserver2 disponibile solo per la distribuzione basata su RHEL? – lun

2

1 In alveare-site.xml, configurazione impostata come di seguito:

<property> 
    <name>hive.server2.authentication</name> 
    <value>NOSASL</value> 
</property> 

2 pyhs2 programmare i codici cambia come di seguito:

with pyhs2.connect(host='localhost', 
        port=10000, 
        authMechanism="NOSASL", 
        user='user', 
        password='password', 
        database='default') as conn: 

prega di notare che il nome utente e la password non può essere vuoto, aggiungi username e password quando si collega a pyhs2

+0

Ha funzionato bene per me, Thanx – user1314742

0

Le risposte sopra non funzionano per il mio caso, ne ho provate anche altre. Infine, ho risolto il mio problema (idea se funziona per voi)

Basta eseguire

export LD_LIBRARY_PATH =/usr/lib64:./Usr/local/lib: $ LD_LIBRARY_PATH prima di eseguire la vostra script.

mio LD_LIBRARY_PATH originale è/usr/local/lib:/usr/lib64

Problemi correlati