这里有一个问题从 java 连接到 Hive但我的是不同的
我的配置单元在 machine1 上运行,我需要使用在 machine2 上运行的 Java 服务器传递一些查询。据我了解,Hive 有一个 JDBC 接口,用于接收远程查询。我从这里获取了代码 -HiveServer2 客户端
我安装了文章中写的依赖项:
- hive-jdbc*.jar
- hive-service*.jar
- libfb303-0.9.0.jar
- libthrift-0.9.0.jar
- log4j-1.2.16.jar
- slf4j-api-1.6.1.jar
- slf4j-log4j12-1.6.1.jar
- commons-logging-1.0.4.jar
然而我得到了java.lang.NoClassDefFoundError编译时出错完整错误:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/conf/Configuration
at org.apache.hive.jdbc.HiveConnection.createBinaryTransport(HiveConnection.java:393)
at org.apache.hive.jdbc.HiveConnection.openTransport(HiveConnection.java:187)
at org.apache.hive.jdbc.HiveConnection.<init>(HiveConnection.java:163)
at org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:105)
at java.sql.DriverManager.getConnection(DriverManager.java:571)
at java.sql.DriverManager.getConnection(DriverManager.java:215)
at com.bidstalk.tools.RawLogsQuerySystem.HiveJdbcClient.main(HiveJdbcClient.java:25)
StackOverflow 上的另一个问题建议在 Maven 中添加 Hadoop API 依赖项 -蜂巢错误
我不明白为什么客户端需要 hadoop API 来连接 Hive。 JDBC 驱动程序不应该不知道底层查询系统吗?我只需要传递一些 SQL 查询?
Edit:我正在使用Cloudera(5.3.1),我想我需要添加CDH依赖项。 Cloudera实例运行hadoop 2.5.0和HiveServer2
但服务器位于机器 1。在机器上,代码至少应该编译,并且我应该只在运行时遇到问题!
如果你还没有解决这个问题,我已经尝试过了。
我需要以下依赖项才能编译和运行:
libthrift-0.9.0-cdh5-2.jar
httpclient-4.2.5.jar
httpcore-4.2.5.jar
commons-logging-1.1.3.jar
hive-common.jar
slf4j-api-1.7.5.jar
hive-metastore.jar
hive-service.jar
hadoop-common.jar
hive-jdbc.jar
guava-11.0.2.jar
Hive 文档可能是针对旧版本/发行版编写的。
您的异常是由于缺少hadoop-common
罐子,其中有org.apache.hadoop.conf.Configuration
.
希望这可以帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)