मैं जो करने की कोशिश कर रहा हूं वह बहुत ही बुनियादी है: पायथन का उपयोग करके इम्पाला डीबी से कनेक्ट करें:

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 पैकेज के अलावा कुछ और आज़माना चाहिए? मैंने उनका उपयोग करते समय बहुत सारे संस्करण संबंधी मुद्दों और निर्भरताओं का अनुभव किया था। यदि हाँ, तो आप विकल्प के रूप में क्या सुझाव देंगे?

धन्यवाद!

1
ds_enth 1 फरवरी 2019, 18:44

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)
0
ds_enth 1 फरवरी 2019, 20:32

यह सरल विधि है, इम्पाला को अजगर का उपयोग करके इम्पाला शेल के माध्यम से जोड़ना।

    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."
0
Trenton McKinney 3 अक्टूबर 2019, 02:57

आपका इम्पाला डोमेन नाम हल नहीं होना चाहिए। क्या आप कमांड प्रॉम्प्ट में nslookup impala करने में सक्षम हैं? यदि आप डॉकर का उपयोग कर रहे हैं, तो आपको docker-compose में "impala" के रूप में docker सेवा का नाम या "extra_hosts" विकल्प होना चाहिए। या आप इसे हमेशा /etc/hosts (Windows/Drivers/etc/hosts) में impala 127.0.0.1 के रूप में जोड़ सकते हैं

कभी-कभी प्लेन के बजाय 'NOSASL' भी आज़माएं जो सुरक्षा बंद होने पर बेहतर काम करता है।

0
Dexter 17 मार्च 2019, 21:21