首页 > 解决方案 > 使用 Anaconda 和 Python 3.8 64 位连接到数据库 Hive 时找不到 Java 类 HiveDriver

问题描述

在过去的几天里,我遇到了一个我无法解释的问题。我在 Windows 10、Anaconda 64 位、Jupyter 64 位、Python 64 位等...我是初学者,我需要帮助。非常感谢您的帮助,非常感谢。我在 anaconda jupyter notebook 下开发,我有一个使用 jdbc 连接到 Hive 数据库的 python 脚本。我添加了一个 jar 文件,其中包含一个 java 类 org.apache.hive.jdbc.HiveDriver。当我运行脚本时,出现以下错误:

类型错误:找不到类 org.apache.hive.jdbc.HiveDriver

这是我的python代码

import jaydebeapi

driver = "org.apache.hive.jdbc.HiveDriver"
url = "jdbc:hive2://ip-172-31-3-208.eu-west-1.compute.internal:11000/default;principal=indexima/ip-172-31-3-208.eu-west-1.compute.internal@INDEXIMA.COM;"
hivejar = "C:/user/xxx/Documents/Python/hive-jdbc-3.1.2.jar"


#create connection and cursor
connection = jaydebeapi.connect(driver, [ url, '', ''], hivejar)
cursor = connection.cursor()

输出是:

    TypeError                                 Traceback (most recent call last)
    <ipython-input-15-3a47c2c3c553> in <module>
         11 
         12 # create connection and cursor
    ---> 13 connection = jaydebeapi.connect(driver, [ url, '', ''], hivejar)
         14 cursor = connection.cursor()
         15 

    C:\ProgramData\Anaconda3\lib\site-packages\jaydebeapi\__init__.py in connect(jclassname, url, driver_args, jars, libs)
        410     else:
        411         libs = []
    --> 412     jconn = _jdbc_connect(jclassname, url, driver_args, jars, libs)
        413     return Connection(jconn, _converters)
        414 

    C:\ProgramData\Anaconda3\lib\site-packages\jaydebeapi\__init__.py in _jdbc_connect_jpype(jclassname, url, driver_args, jars, libs)
        219             return jpype.JArray(jpype.JByte, 1)(data)
        220     # register driver for DriverManager
    --> 221     jpype.JClass(jclassname)
        222     if isinstance(driver_args, dict):
        223         Properties = jpype.java.util.Properties

    C:\ProgramData\Anaconda3\lib\site-packages\jpype\_jclass.py in __new__(cls, jc, loader, initialize)
         97 
         98         # Pass to class factory to create the type
    ---> 99         return _jpype._getClass(jc)
        100 
        101 

    **TypeError: Class org.apache.hive.jdbc.HiveDriver is not found**

jar 文件当然包含 java 类 HiveDriver。我更改了罐子的名称并替换为任何名称,我得到了相同的诊断。就好像 Jupyter 将寻找其他地方一样。谢谢你的帮助。

标签: pythonjdbchiveanacondajupyter

解决方案


您在此处使用的参数中有一个小错误配置:

connection = jaydebeapi.connect(driver, [ url, '', ''], hivejar)

URL 不应该放在[ ]数组中 - 只有用户 ID 和密码字符串。

改用这个:

connection = jaydebeapi.connect(driver, url, ['', ''], hivejar)

更多示例官方文档中。


推荐阅读