2015-06-08 6 views
8

Próbowałem użyć przykładu na https://cwiki.apache.org/confluence/display/Hive/Setting+Up+HiveServer2 ale pobiera następujące błędy:pyton nie może połączyć 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 

Oto ula dziennika:

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) 

Czy ktoś może pomóc w rozwiązaniu problemu? Dziękuję Ci bardzo. Wersja

OS: Ubuntu 14.04.1
wersja Hive: apache-ula-1.2.0
wersja SASL: SASL-0.1.3
Thrift wersja: gospodarność-0.9.1

+0

Czy Twój HiveServer2 Kerberos lub w zabezpieczonym klastra? – javabrett

+0

W ula-site.xml, mam ustawione hive.server2.authentication NONE lun

+0

Czy to tylko jedna maszyna nie można połączyć-z, lub wszystkie maszyny? – javabrett

Odpowiedz

12

You brakuje pewnych zależności, upewnij się, że instalacja cyrus-sasl-devel i cyrus-sasl-gssapi:

Na dystrybucji RHEL opartym:

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

... lub na dystrybucji Debian opartym:

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

Per @KenKennedy również dodać pakiet libsasl2-modules-gssapi-mit jeśli przy użyciu GSSAPI do uwierzytelniania.

+0

Jednak dla serwerów Ubuntu nie mają one "cyrus-sasl-devel" i "cyrus-sasl-gssapi". Po prostu znajduję i instaluję niektóre prawdopodobne pakiety: 'sasl2-bin',' libsasl2-2', 'libsasl2-dev' – lun

+0

Dzięki, dodaliśmy szczegóły pakietów dla dwóch typów pakietów dystrybucyjnych. Jeśli teraz wygląda prawidłowo, możesz zaakceptować tę odpowiedź. – javabrett

+0

Przepraszamy za to, po zainstalowaniu tych pakietów, błędy nadal istnieją ...Czy pyhs2 lib dla Pythona łączy się z hiveserver2 dostępnym tylko dla dystrybucji opartej na RHEL? – lun

2

1 W ula-site.xml ustawić konfiguracji jak poniżej:

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

2 pyhs2 programowania kodów zmian jak poniżej:

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

Należy pamiętać, że nazwa użytkownika i hasło nie mogą być puste, dodaj dowolną nazwę użytkownika i hasło, gdy łączy się z pyhs2

+0

Udało mi się to dobrze, Thanx – user1314742

0

Powyższe odpowiedzi nie działają w moim przypadku, próbowałem również innych. Wreszcie, mam rozwiązać mój problem (nie wiem czy to działa dla ciebie)

Wystarczy wykonać

eksportowej LD_LIBRARY_PATH =/usr/lib64.:/Usr/local/lib: $ LD_LIBRARY_PATH przed prowadzeniu scenariusz.

Mój oryginalny LD_LIBRARY_PATH jest/usr/local/lib:/usr/lib64