【发布时间】:2014-06-01 15:36:21
【问题描述】:
您好,我在尝试使用 hiveserver2 从远程 hadoop 集群获取数据时遇到问题。
从某种意义上说,JDBC 连接正在工作,元数据查询(例如 show tables)正在工作,甚至需要简单数据列表的查询(例如 select * from table)也在工作。但是当查询时,会导致映射-reduce 作业在 hadoop 上执行,例如 select count(*) from table 然后它会引发连接异常。我可以在配置单元日志中看到查询执行没有任何错误。
我用beeline尝试了同样的事情,当我使用localhost连接时它工作,但是当我使用服务器名称连接时,执行只是挂起。
我确定我的某些配置属性会导致此问题。
我正在使用 hadoop 2.0 版和 Hive 0.12.0 版
为了清楚起见,客户端抛出的错误如下
Exception in thread "main" java.sql.SQLException: org.apache.thrift.transport.TTransportException
at org.apache.hive.jdbc.HiveStatement.execute(HiveStatement.java:203)
at org.apache.hive.jdbc.HiveStatement.executeQuery(HiveStatement.java:300)
at com.nanobi.contentserver.Aatest.HiveJdbcClient.main(HiveJdbcClient.java:57)
就像我说的服务器或 hive.log 上没有错误,并且查询成功执行。 最好的猜测是在获取查询结果时引发了错误。但无法找到确切的位置。
如果需要进一步说明以了解问题,请告诉我
提前致谢
【问题讨论】:
-
您是通过 Beeline 运行查询吗?如果不是,那是什么?另外,您在本地安装了哪个版本的 Thrift?
-
嗨,Eli,查询在直线上运行良好,同时在连接 url 中使用“localhost”或服务器的 IP。即使 java 客户端在安装 Hive 的服务器上执行时也可以工作。问题只是在进行远程连接时,即使这样我也可以在 Hiveserver2 控制台上看到查询执行没有任何错误,日志中也没有。
-
只是 Hiveserver2 无法获取查询结果。该问题仅在导致 hadoop 上的 mapreduce 作业的查询的情况下出现,例如 'select count(*) from table '.简单的查询数据由 hive 服务器获取。Thrift 附带 Hive-0.12.0 安装,所以我猜 Thrift 也是相同的版本。如果您需要任何其他详细信息,请告诉我。问候
-
需要明确的是,当从 Beeline 远程执行时,产生 MR 的查询是否也有效?还是只是在本地?无论如何,如果您只尝试使用一个库进行远程处理,请尝试另一个。 Pyhs2 (github.com/BradRuderman/pyhs2) 易于使用且运行良好。在那里尝试,看看是否会出现同样的问题。想法是看看这是否与您的某个 Java 包有关,或者是系统问题。
-
从直线远程执行产生 MR 的查询也不能正常工作
标签: hadoop jdbc mapreduce hive