मैं जो करने की कोशिश कर रहा हूं वह बहुत ही बुनियादी है: पायथन का उपयोग करके इम्पाला डीबी से कनेक्ट करें:
from impala.dbapi import connect
conn = connect(host='impala', port=21050, auth_mechanism='PLAIN')
मैं ऐसा करने के लिए इम्पीला पैकेज का उपयोग कर रहा हूं। मुझे यह त्रुटि मिली:
Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/thriftpy/transport/socket.py", line 96, in open
self.sock.connect(addr)
socket.gaierror: [Errno -3] Temporary failure in name resolution
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/alaaeddine/PycharmProjects/test/data_test.py", line 3, in <module>
conn = connect(host='impala', port=21050, auth_mechanism='PLAIN')
File "/usr/local/lib/python3.6/dist-packages/impala/dbapi.py", line 147, in connect
auth_mechanism=auth_mechanism)
File "/usr/local/lib/python3.6/dist-packages/impala/hiveserver2.py", line 758, in connect
transport.open()
File "/usr/local/lib/python3.6/dist-packages/thrift_sasl/__init__.py", line 61, in open
self._trans.open()
File "/usr/local/lib/python3.6/dist-packages/thriftpy/transport/socket.py", line 104, in open
message="Could not connect to %s" % str(addr))
thriftpy.transport.TTransportException: TTransportException(type=1, message="Could not connect to ('impala', 21050)")
Ibis पैकेज का भी प्रयास किया लेकिन उसी मितव्ययी संबंधित त्रुटि के साथ विफल रहा।
विंडोज़ में डीबीवर का उपयोग करके, मैं आधिकारिक क्लौडेरा जेडीबीसी कनेक्टर का उपयोग कर डेटाबेस से कनेक्ट कर सकता था। मेरे प्रश्न हैं:
- मेरे JDBC कनेक्टर को मेरे कनेक्ट कोड में पैरामीटर के रूप में पास करना चाहिए? मैंने कुछ खोज की है मुझे इस दिशा की ओर इशारा करते हुए कुछ नहीं मिला।
- क्या मुझे Ibis और Impyla पैकेज के अलावा कुछ और आज़माना चाहिए? मैंने उनका उपयोग करते समय बहुत सारे संस्करण संबंधी मुद्दों और निर्भरताओं का अनुभव किया था। यदि हाँ, तो आप विकल्प के रूप में क्या सुझाव देंगे?
धन्यवाद!
3 जवाब
हल: मैंने Ibis/Impyla के बजाय pyhive पैकेज का उपयोग किया। यहाँ एक उदाहरण है:
#import hive from pyhive
from pyhive import hive
#establish the connection to the db
conn = hive.Connection(host='host_IP_addr', port='conn_port', auth='auth_type', database='my_db')
#prepare the cursor for the queries
cursor = conn.cursor()
#execute a query
cursor.execute("SHOW TABLES")
#navigate and display the results
for table in cursor.fetchall():
print(table)
यह सरल विधि है, इम्पाला को अजगर का उपयोग करके इम्पाला शेल के माध्यम से जोड़ना।
import commands
import re
query1 = "select * from table_name limit 10"
impalad = str('hostname')
port = str('21000')
database = str('database_name')
result_string = 'impala-shell -i "'+ impalad+':'+port +'" -k -B --delimited -q "'+query1+'"'
status, output = commands.getstatusoutput(result_string)
print output
if status == 0:
print output
else:
print "Error encountered while executing HiveQL queries."
आपका इम्पाला डोमेन नाम हल नहीं होना चाहिए। क्या आप कमांड प्रॉम्प्ट में nslookup impala
करने में सक्षम हैं? यदि आप डॉकर का उपयोग कर रहे हैं, तो आपको docker-compose में "impala" के रूप में docker सेवा का नाम या "extra_hosts" विकल्प होना चाहिए। या आप इसे हमेशा /etc/hosts (Windows/Drivers/etc/hosts) में impala 127.0.0.1
के रूप में जोड़ सकते हैं
कभी-कभी प्लेन के बजाय 'NOSASL' भी आज़माएं जो सुरक्षा बंद होने पर बेहतर काम करता है।
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।