0
我正嘗試使用Python jaydebeapi連接到Impala數據庫。我在兩次調用連接類時遇到了JVM問題。請在我的連接類和Sql_Query
課下面找到。Python JDBC連接拋出JVM問題
Connection_Class:
import jaydebeapi
import jpype
import datetime
import ConfigParser
from fileinput import close
config = ConfigParser.RawConfigParser ()
config.read ('ConfigFile.properties')
def Impala_Connection(sql_query):
conn_impala = None
try:
jars_location = config.get ('Jars_info' , 'Jars_Location')
args = "-Djava.class.path=%s" % jars_location
jvm_path = jpype.getDefaultJVMPath ()
jpype.startJVM (jvm_path , args)
except IOError as err:
print('An error occurred trying to read the file:{}".format(e)')
sql_query.close ()
else:
try:
print "Start executing: " + sql_query + " at " + str (
datetime.datetime.now ().strftime ("%Y-%m-%d %H:%M")) + "\n"
url = config.get ('Jars_info' , 'Jdbc_Url')
Jdbc_Driver_Class = config.get ('Jars_info' , 'Jdbc_Driver_Class')
username = config.get ('Jars_info' , 'username')
password = config.get ('Jars_info' , 'password')
jdbc_jar_location = config.get ('Jars_info' , 'Jdbc_Jar_Location')
conn_impala = jaydebeapi.connect (Jdbc_Driver_Class , url , {username , password} , jdbc_jar_location)
curs = conn_impala.cursor ()
sql_execution = curs.execute (sql_query)
data = curs.fetchall (sql_execution)
curs.close()
return (data)
except Exception, err:
print("Something went wrong with Impala Connection: {}".format(err))
finally:
close(conn_impala)
jpype.shutdownJVM()
Sql_Query_Class:
from pyspark import SparkConf, SparkContext
from com.my.common_funcitons.Impala_Query_Executor import Impala_Connection
import sys
conf = SparkConf().setAppName("pyspark")
sc = SparkContext(conf=conf)
tbl_name = sys.argv[1]
refid = sys.argv[2]
metadata_Query="SELECT * from Metadata_Table TABLE_NAME='%s' and TEMP.unique_id=%s" %(tbl_name,refid)
metadata_info=Impala_Connection(metadata_Query)
if len(metadata_info) == 0:
new_tbl_name = tbl_name+"_%"
metadata_Query="SELECT * from Metadata_Table TABLE_NAME='%s' and TEMP.unique_id=%s"" (new_tbl_name,refid)
metadata_info=Impala_Connection(metadata_Query)
for row in metadata_info:
metadata_no_of_columns=row[0]
metadata_table_id=row[1]
else:
for row in metadata_info:
metadata_no_of_columns=row[0]
metadata_table_id=row[1]
我有一個表,table_000兩點式表名的,所以如果我得到空數據我需要添加table_%,並要求相同。當我打電話來自同一班的Impala連接時,我得到JVM問題,請找到下面的錯誤堆棧:
File "/usr/lib64/python2.7/site-packages/jpype/_core.py", line 50, in startJVM
_jpype.startup(jvm, tuple(args), True)
RuntimeError: Unable to start JVM at native/common/jp_env.cpp:78
我嘗試在final類中添加JVMshutdown,但仍然面臨問題。請向我推薦一個解決方案。
你*有*安裝了兼容的JVM,對吧? –
嗨戈爾湯普森雅JVM安裝其工作正常,如果我只打一次函數,如果我再次調用它從相同的功能,我面臨的問題 – Rahul