簡體   English   中英

如何使用python客戶端訪問遠程服務器上的Hive

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM