![](/img/trans.png)
[英]How to connect a remote Hive server from Python using JDBC and SSL?
[英]How to access Hive on remote server using python client
案例:我在cloudera平台上安裝了Hive。 我想從計算機上使用python客戶端訪問Hive上的一個數據庫。 我讀了一個類似的SO問題,但它使用的是pyhs2,無法在遠程服務器上安裝。 而這SO問題也使用節儉,但我不能似乎要么安裝。
代碼:按照文檔進行操作后,執行以下程序會出現錯誤。
import pyodbc, sys, os
pyodbc.autocommit=True
con = pyodbc.connect("DSN=default",driver='SQLDriverConnect',autocommit=True)
cursor = con.cursor()
cursor.execute("select * from fb_mpsp")
錯誤:ssh://ashish@ServerIPAddress/home/ashish/anaconda/bin/python2.7 -u /home/ashish/PyCharm_proj/hdfsConnect/home/ashish/PyCharm_proj/hdfsConnect/Hive_connect/hive_connect.py
追溯(最近一次通話最近):文件“ /home/ashish/PyCharm_proj/hdfsConnect/home/ashish/PyCharm_proj/hdfsConnect/Hive_connect/hive_connect.py”,第5行,con = pyodbc.connect(“ DSN = default”, driver ='SQLDriverConnect',autocommit = True)
pyodbc.Error :(“ IM002”,“ [IM002] [unixODBC] [驅動程序管理器]找不到數據源名稱,並且未指定默認驅動程序(0)(SQLDriverConnect)”)
流程以退出代碼1完成
請提出如何解決這個問題? 另外,我不確定在使用hadoop配置單元執行代碼時為什么必須將驅動程序指定為SQLDriverConnect?
謝謝
這對我有用
oODBC = pyodbc.connect("DSN=Cloudera Hive DSN 64;", autocommit = True, ansi = True )
現在一切正常。
使用以下方法確保DSN一切正常:
isql -v "Cloudera Hive DSN 64"
並將“ Cloudera Hive DSN 64”替換為您在odbc.ini中使用的名稱
另外,當前,除非我手工制作票證,否則我將無法使用kerberos身份驗證。 Impala使用kerberos keytab文件可順利運行
感謝您提供有關如何使Hive odbc與keytab文件一起使用的任何幫助。
如果您決定重新訪問pyhs2
請注意,不需要將其安裝在遠程服務器上,而是將其安裝在本地客戶端上。
如果繼續使用pyodbc
,則需要安裝Hive的ODBC驅動程序,您可以從Cloudera的站點獲得該驅動程序。
您無需在連接中指定驅動程序,它應該是DSN的一部分。 創建DSN的具體細節取決於您的操作系統,但實際上您將使用管理工具->數據源(Windows)創建它,安裝ODBC並編輯/Library/ODBC/odbc.ini
),或編輯/etc/odbc.ini
(Linux)。
從概念上講,可以將DSN視為代表有關連接的所有信息的規范-它將包含主機,端口和驅動程序信息。 這樣,您就不必在代碼中指定這些內容,並且可以在不更改代碼的情況下切換有關數據庫的詳細信息。
# Note only the DSN name specifies the connection
import pyodbc
conn = pyodbc.connect("DSN=Hive1")
cursor = conn.cursor()
cursor.execute("select * from YYY")
另外,我還用有關如何安裝舊版庫的信息更新了您引用的另一個問題。 我認為這是您可以采取的方法。
還嘗試使用此方法來連接並從hive服務器遠程獲取數據:將遠程服務器與ssh連接,並提供cli命令以從遠程服務器訪問數據: ssh -o UserKnownHostsFile=/dev/null -o ConnectTimeout=90 -o StrictHostKeyChecking=no shashanks@remote_host 'hive -e "select * from DB.testtable limit 5;" >/home/shashanks/testfile'
ssh -o UserKnownHostsFile=/dev/null -o ConnectTimeout=90 -o StrictHostKeyChecking=no shashanks@remote_host 'hive -e "select * from DB.testtable limit 5;" >/home/shashanks/testfile'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.