https://cwiki.Apache.org/confluence/display/Hive/HiveClient#HiveClient-Python は古いようです。
これを/ etc/profileに追加すると:
export PYTHONPATH=$PYTHONPATH:/usr/lib/Hive/lib/py
from Hive import ThriftHive
を除いて、リンクにリストされているインポートを実行できます。
from Hive_service import ThriftHive
次に、この例のポートは10000でしたが、これを試みたときにプログラムがハングしました。デフォルトのHive Thriftポートは9083で、ハングを停止しました。
だから私はそれを次のように設定しました:
from thrift import Thrift
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
try:
transport = TSocket.TSocket('<node-with-metastore>', 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)
次のエラーが表示されました。
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
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'
ただし、ThriftHive.pyファイルを調べると、メソッドがClientクラス内で実行されていることがわかります。
Pythonを使用してHiveにアクセスするにはどうすればよいですか?
最も簡単な方法はPyHiveを使用することだと思います。
インストールするには、これらのライブラリが必要です。
pip install sasl
pip install thrift
pip install thrift-sasl
pip install PyHive
ライブラリはPyHive
としてインストールしますが、モジュールはすべて小文字のpyhive
としてインポートします。
Linuxを使用している場合は、上記を実行する前にSASLを個別にインストールする必要があります。 apt-getまたはyum、またはディストリビューション用のパッケージマネージャーを使用して、libsasl2-devパッケージをインストールします。 Windowsの場合、GNU.orgにはいくつかのオプションがあり、バイナリインストーラーをダウンロードできます。 Macでは、Xcode開発者ツール(xcode-select --install
をターミナルにインストールした場合)が利用可能になります。
インストール後、次のようにHiveに接続できます。
from pyhive import Hive
conn = Hive.Connection(Host="YOUR_Hive_Host", port=PORT, username="YOU")
Hive接続ができたので、それを使用するオプションがあります。単純なクエリを実行できます:
cursor = conn.cursor()
cursor.execute("SELECT cool_stuff FROM Hive_table")
for result in cursor.fetchall():
use_result(result)
...または接続を使用してPandasデータフレームを作成するには:
import pandas as pd
df = pd.read_sql("SELECT cool_stuff FROM Hive_table", conn)
私はあなたがHiveServer2を使用していると断言します。これがコードを機能させない理由です。
Pyhs2を使用して、Hiveとそのようなサンプルコードに正しくアクセスできます。
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
Pyhs2をpipでインストールする前に、python-devel.x86_64 cyrus-sasl-devel.x86_64をインストールできることに注意してください。
これがあなたを助けることを願っています。
以下のpythonプログラムは、PythonからHiveテーブルにアクセスするために動作するはずです。
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"
Hiveライブラリを使用できます。Hiveimport ThriftHiveからHiveクラスをインポートするためです。
この例を試してください:
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)
ユーザー名/パスワードを使用してポートを指定して接続するには、コードは次のようになります。
from pyhive import presto
cursor = presto.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())
pythonから複数のサーバー(SQL、Teradata、Hiveなど)に接続し続けるので、ここで簡単にできる一般的なアプローチを示します。したがって、pyodbcコネクターを使用します。 pyodbcを使用するための基本的な手順を次に示します(使用したことがない場合)。
完了したら:ステップ1. pip install:pip install pyodbc
( MicrosoftのWebサイトから関連するドライバーをダウンロードするためのリンクです )
ステップ2.ここで、pythonスクリプトに同じものをインポートします。
import pyodbc
ステップ3.最後に、次のように接続の詳細を入力します。
conn_Hive = pyodbc.connect('DSN = YOUR_DSN_NAME , SERVER = YOUR_SERVER_NAME, UID = USER_ID, PWD = PSWD' )
Pyodbcを使用する最大の利点は、ほとんどすべてのデータソースに接続するために1つのパッケージのみをインポートする必要があることです。
上記の例は少し時代遅れです。新しい例を次に示します。
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()
標準のpythonプログラムに加えて、PythonがHadoopデータベースへの接続を構築できるようにするために、いくつかのライブラリをインストールする必要があります。
1.Pyhs2、Python Hive Server 2クライアントドライバー
2. Python用のSasl、Cyrus-SASLバインディング
3.Thrift、Apache Thrift RPCシステムのPythonバインディング
4.PyHive、Python Hiveへのインターフェース
実行可能ファイルの許可を忘れずに変更してください
chmod + x test_Hive2.py ./test_Hive2.py
役に立てば幸いです。リファレンス: https://sites.google.com/site/tingyusz/home/blogs/hiveinpython
ユーザーがクラスターノードにパッケージとライブラリをダウンロードしてインストールすることを禁止するのが一般的な方法です。この場合、Hiveが同じノードで実行されていれば、@ python-starterと@goksのソリューションは完璧に機能します。それ以外の場合は、beeline
コマンドラインツールの代わりにHive
を使用できます。 詳細 を参照してください
#python 2
import commands
cmd = 'beeline -u "jdbc:Hive2://node07.foo.bar:10000/...<your connect string>" -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/...<your connect string>" -e "SELECT * FROM db_name.table_name LIMIT 1;"'
status, output = subprocess.getstatusoutput(cmd)
if status == 0:
print(output)
else:
print("error")
@ python-starterソリューションに似ています。ただし、コマンドパッケージはpython 3.xでは使用できません。代替ソリューションは、Python 3.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")
Eycheuのソリューションに似ていますが、もう少し詳細です。
ここに代替ソリューションがあり、特にHive2に対してはPyHiveを必要としないまたはシステム全体のパッケージをインストールします。私はルートアクセス権がないLinux環境で作業しているので、Tristinの投稿で述べたSASL依存関係をインストールすることは私にとって選択肢ではありませんでした。
Linuxを使用している場合は、上記を実行する前にSASLを個別にインストールする必要があります。 apt-getまたはyumまたはディストリビューション用のパッケージマネージャーを使用して、libsasl2-devパッケージをインストールします。
特に、このソリューションはpythonパッケージの活用に焦点を当てています:JayDeBeApi。私の経験では、python Anaconda 2.7のインストールの上にこの1つの追加パッケージをインストールするだけで十分でした。このパッケージは、Java(JDK)を活用します。私はそれが既に設定されていると仮定しています。
ステップ1:JayDeBeApiをインストールする
pip install jaydebeap
ステップ2:環境に適したドライバーをダウンロードする:
すべての.jarファイルをディレクトリに保存します。このディレクトリを/ path/to/jar/files /と呼びます。
ステップ3:システム認証メカニズムを特定します:
リストされたpyhiveソリューションでは、認証メカニズムおよびKerberosとしてPLAINがリストされています。 jdbc接続URLは、使用している認証メカニズムに依存することに注意してください。説明しますKerberosソリューションユーザー名/パスワードを渡さずに。 詳細はKerberos認証とオプションです。
Kerberosチケットがまだ作成されていない場合は作成します
$ kinit
チケットはklist
で表示できます。
これで、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)
読むことだけが必要な場合は、eycheuのソリューションを使用して、簡単にパンダのデータフレームに直接読み込むことができます。
import pandas as pd
df = pd.read_sql("select * from table", conn_Hive)
それ以外の場合、より汎用性の高い通信オプションを次に示します。
cursor = conn_Hive.cursor()
sql_expression = "select * from table"
cursor.execute(sql_expression)
results = cursor.fetchall()
テーブルを作成したい場合、結果を「フェッチ」する必要はなく、代わりにテーブル作成クエリを送信できます。
python JayDeBeApiパッケージを使用して、HiveまたはImpala JDBCドライバーからDB-API接続を作成し、接続をpandas.read_sql関数に渡して、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()
pyhs2は維持されなくなりました。より良い代替はimpylaです
Impalaに関する上記の例の一部と混同しないでください。 HiveServer2のポートを10000(デフォルト)に変更するだけで、Impalaの例と同じように機能します。 ImpalaとHiveの両方に使用されるのと同じプロトコル(Thrift)です。
https://github.com/cloudera/impyla
Pyhs2よりも多くの機能があります。たとえば、Kerberos認証があります。これは私たちにとって必須です。
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はhs2クライアントにさらに力を入れています https://github.com/cloudera/hs2client これはC/C++ HiveServer2/Impalaクライアントです。大量のデータをPythonに送信したり、Pythonから送信したりする場合は、より適切なオプションになる可能性があります。 (Pythonバインディングもあります- https://github.com/cloudera/hs2client/tree/master/python )
Impylaに関するいくつかの詳細情報:
これは、Hiveと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()
出力:タプルのリスト
Pythonクライアントドライバーを使用する
pip install pyhs2
それから
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
私はあなたと同じ問題を解決しました、ここに私の動作環境があります(システム:linuxバージョン:python 3.6パッケージ:Pyhive)次のように私の答えを参照してください:
from pyhive import Hive
conn = Hive.Connection(Host='149.129.***.**', port=10000, username='*', database='*',password="*",auth='LDAP')
重要なポイントは、参照パスワードと認証を追加し、その間に認証を「LDAP」に設定することです。その後、それはうまく機能し、質問があれば私に知らせてください