2017-06-25 22 views
0

pyhiveを使用してPythonをハイブに接続したいと考えています。私は私のローカルで実行される、以下のpythonスクリプトを使用しています。Python Pyhiveモジュールは名前ハイブをインポートできません

#!/usr/bin/env python 
# coding: utf-8 
from pyhive import hive 
from TCLIService.ttypes import TOperationState 
def mysql_connect(host, port, username): 
conn = hive.Connection(host=host, port=port, username=username) 
return conn.cursor() 

cursor = mysql_connect("localhost", 50070, "hduser") 
cursor.execute("show databases") 
print_log(cursor) 

I場所に/usr/local/lib/python2.7/dist-packagesをpyhive本を持っているが、私は、次の出力

[email protected]:~/Desktop/Python/Automation$ ./pyhive_test.py 
Traceback (most recent call last): 
    File "./pyhive_test.py", line 9, in <module> 
    cursor = mysql_connect("localhost", 50070, "hduser") 
    File "./pyhive_test.py", line 6, in mysql_connect 
    conn = hive.Connection(host=host, port=port, username=username) 
    File "/usr/local/lib/python2.7/dist-packages/pyhive/hive.py", line 131, in __init__ 
    self._transport.open() 
    File "/usr/local/lib/python2.7/dist-packages/thrift_sasl/__init__.py", line 80, in open 
    status, payload = self._recv_sasl_message() 
    File "/usr/local/lib/python2.7/dist-packages/thrift_sasl/__init__.py", line 101, in _recv_sasl_message 
    payload = read_all_compat(self._trans, length) 
    File "/usr/local/lib/python2.7/dist-packages/thrift_sasl/six.py", line 31, in <lambda> 
    read_all_compat = lambda trans, sz: trans.readAll(sz) 
    File "/home/vaibhav/.local/lib/python2.7/site-packages/thrift/transport/TTransport.py", line 60, in readAll 
    chunk = self.read(sz - have) 
    File "/home/vaibhav/.local/lib/python2.7/site-packages/thrift/transport/TSocket.py", line 132, in read 
    message='TSocket read 0 bytes') 
thrift.transport.TTransport.TTransportException: TSocket read 0 bytes 

で終わる編集 1ファイルの名前がPyhiveからpyhive_testに変更されました

  1. pyhive.pyがディレクトリから削除されました

解決策が試み: 1.Thereはpython2.7とPython 3.4の2つのバージョンがインストールされていました。私は Python3.4をアンインストールしましたが、まだフォルダは /usr/local/lib /にあるようです。私は自分のPythonがインストールされている場所を確認するには、以下のコマンドの一部を実行し、パッケージが利用可能PYTHONPATH

[email protected]:~$ which -a python 
/usr/bin/python 
[email protected]:~$ python -c "import sys, pprint; pprint.pprint(sys.path)" 
['', 
'/home/vaibhav', 
'/usr/lib/python2.7/dist-packages', 
'/usr/lib/python2.7', 
'/usr/lib/python2.7/plat-x86_64-linux-gnu', 
'/usr/lib/python2.7/lib-tk', 
'/usr/lib/python2.7/lib-old', 
'/usr/lib/python2.7/lib-dynload', 
'/home/vaibhav/.local/lib/python2.7/site-packages', 
'/usr/local/lib/python2.7/dist-packages', 
'/usr/lib/python2.7/dist-packages/PILcompat', 
'/usr/lib/python2.7/dist-packages/gtk-2.0', 
'/usr/lib/pymodules/python2.7', 
'/usr/lib/python2.7/dist-packages/ubuntu-sso-client'] 

2.リンクからの参照は、彼らが仮想環境には、それを使用するか、清潔なアナコンダを使用するように述べたhereを述べました。どのようにそれらを使用せず、既存の設定にどのように影響するかわかりません。

3.私はsudoを使用してPyhiveをインストールしました。このため、私はこのlinkに続いて許可を変更しましたが、同じ問題がありました。

答えて

0

開始するファイルの名前はpyhive.pyです。

あなたが行うと、あなたのpyhive.py内部

from pyhive import hive 

、それはないpyhiveライブラリから、あなたモジュールからhiveをインポートしようとします。

既存のモジュール/ライブラリの名前を使用するには、何か他のものを開始するファイルに名前を付けて、それを避けてください。 docsから

スパムという名前のモジュールは、インタプリタ最初の検索は、その名前のビルトインモジュールに対して、インポートされます。見つからなければ、変数sys.pathによって指定されたディレクトリのリスト内のspam.pyという名前のファイルを検索します。 sys.pathは、次の場所から初期化されます。

  • 入力スクリプト(または現在のディレクトリ)を含むディレクトリ。
  • PYTHONPATH(ディレクトリ名のリスト。シェル変数PATHと同じ構文です)。
  • インストールに依存するデフォルトです。
+0

私はまだあなたがあなたの質問を更新し、新しいエラーメッセージを追加してもらえ同じエラー – codaholic

+0

を取得し、pyhive_testするためにそれを変更? '' pyhive_test.py'と同じディレクトリに '' pyhive.py''というファイルが存在しないことを確認しましたか? –

+0

質問を更新しましたが、同じディレクトリに '' pyhive.py''ファイルがあります。削除してください。 –

関連する問題