我正在使用pyodbc查询Hive。我还可以访问CLI来输入查询。当我在CLI中输入查询时,一切都会运行,但是当我在pydobc中输入查询时

cursor.execute(query)
results = cursor.fetchall()

我收到此错误:
Error: ('HY000', "[HY000] [Cloudera][HiveODBC] (35) Error from Hive: error code: '0' error message: 'java.io.IOException: java.io.EOFException'. (35) (SQLFetch)")

有时它可以正常运行而不会给出此错误,有时它会失败。我不知道是什么原因造成的。它仅在选择列的子集而不是SELECT *时发生。

最佳答案

来自ODBC的消息显示“java.io.IOException:java.io.EOFException”,这是在Java堆栈中引发的异常。该错误很可能不是源自ODBC驱动程序而是来自服务器。

ODBC驱动程序通过Thrift服务器(Hive Server 1或Hive Server 2)与Hive通信,但是CLI绕过Thrift服务器。您是否尝试过使用beeline重现此问题? Beeline使用开源JDBC驱动程序通过Thrift服务器与Hive通信。

如果beeline也可以重现此问题,则错误可能是Thrift服务器在获取结果时产生的。在这种情况下,您可能需要检查服务器日志以获取有关该错误的更多详细信息。如果您正在使用CDH,则可以在Cloudera Manager中检查HiveServer2日志(我猜您可能正在使用Hive Server 2)。

干杯,
霍尔曼

08-04 23:57
查看更多