Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python JDBC连接抛出JVM问题_Python_Jdbc_Jvm_Jpype_Jaydebeapi - Fatal编程技术网

Python JDBC连接抛出JVM问题

Python JDBC连接抛出JVM问题,python,jdbc,jvm,jpype,jaydebeapi,Python,Jdbc,Jvm,Jpype,Jaydebeapi,我正在尝试使用Python jaydebeapi连接到Impala数据库。当我两次调用连接类时,我面临JVM问题。请在下面找到我的连接类和Sql\u查询类 连接等级: import jaydebeapi import jpype import datetime import ConfigParser from fileinput import close config = ConfigParser.RawConfigParser ( ) config.read ( 'ConfigFile.pr

我正在尝试使用Python jaydebeapi连接到Impala数据库。当我两次调用连接类时,我面临JVM问题。请在下面找到我的连接类和
Sql\u查询

连接等级:

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\u查询\u类:

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和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

我试图在最后一个类中添加JVMShutton,但仍然面临问题。请向我建议解决方案。

使用jpype.isJVMStarted()函数,我可以检查jvm是否启动,我解决了问题

使用jpype.isJVMStarted()函数,我可以检查jvm是否已启动,并解决了问题

当我试图解决这个问题时,我检查了在这个jaydebeapi连接之前我是否正在与HDFS系统进行pyarrow连接。我意识到顺序在这个问题上很重要,如果你用另一种方式进行连接(Jaydebeapi,然后是pyarrow连接),它就会工作


不知道这是否与您的问题有关,但这有助于缓解其他人的问题。

当我试图解决此问题时,我检查了在进行此jaydebeapi连接之前我是否正在与HDFS系统进行pyarrow连接。我意识到顺序在这个问题上很重要,如果你用另一种方式进行连接(Jaydebeapi,然后是pyarrow连接),它就会工作


不知道这是否与您的问题有关,但这有助于缓解其他人的问题。

您确实安装了兼容的JVM,对吗?Hi Gord Thompson ya JVM已经安装好了,如果我只调用一次函数,如果我从同一个函数再次调用它,那么它工作正常。我面临的问题是,您确实安装了兼容的JVM,是吗?Hi Gord Thompson ya JVM已经安装好了,如果我只调用一次函数,如果我从我面临问题的同一个函数再次调用它,那么JVM工作正常