当前位置: 首页 > 后端技术 > Java

SpringBoot工程通过jdbc连接Hive

时间:2023-04-02 00:03:07 Java

首先确定当前的hive版本例如:我当前的版本是hive-common-1.1.0-cdh5.16.2.jarSpringBoot工程通过jdbc连接Hive注意:导入的Hive-jdbc依赖需要Hive版本保持不变。对应的,hive-common-1.1.0引入的Hive-jdbc版本为1.1.0(排除log4j依赖是为了解决原项目引入Hive依赖后日志不输出的问题)org.apache.hivehive-jdbc       1.1.0 org.eclipse.jetty.聚合*org.apache.logging.log4jlog4j-slf4j-implorg.slf4jslf4j-log4j12org.apache.log4jorg.apache.hive.org.apache.log4jlog4jlog4joff,importHive-jdbc1.1.0然后尝试连接,也会报错如下java.lang.NoClassDefFoundError:org/apache/hadoop/conf/Configurationatorg.apache.hive.jdbc.HiveConnection.createBinaryTransport(HiveConnection.java:393)atorg.apache.hive.jdbc.HiveConnection.openTransport(HiveConnection.java:187)atorg.apache.hive.jdbc.HiveConnection.(HiveConnection.java:163)atorg.apache.hive。jdbc.HiveDriver.connect(HiveDriver.java:105)atjava.sql.DriverManager.getConnection(DriverManager.java:664)atjava.sql.DriverManager.getConnection(DriverManager.java:247)atcom.hundsun.duqa.admin.api.service.DuqaHiveJDBCTest.test2(DuqaHiveJDBCTest.java:42)在sun.reflect.NativeMethodAccessessorImpl.invoke0(本机方法)在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)在java.lang.reflect.Method.invoke(方法。java:498)在org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)在org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)在org.junit。runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)在org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)在org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks。评估(RunBeforeTestMethodCallbacks.java:75)在org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)在org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat。java:84)在org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)在org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:252)在org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)atorg.junit.runners.ParentRunner$3.run(ParentRunner.java:290)atorg.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)atorg.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)在org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)在org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)在org.springframework.test。context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)atorg.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)atorg.junit.runners.ParentRunner.run(ParentRunner.java:363)在org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)在org.junit.runner.JUnitCore.run(JUnitCore.java:137)在com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)在com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)在com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230)在com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java):58)引起:java.lang.ClassNotFoundException:org.apache.hadoop.conf.Configurationatjava.net.URLClassLoader.findClass(URLClassLoader.java:382)atjava.lang.ClassLoader.loadClass(ClassLoader.java:418)atsun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)atjava.lang.ClassLoader.loadClass(ClassLoader.java:351)...35more报错的原因是我们还需要importHadoop-common包,这里我选择2.6.5org.apache.hadoophadoop-common2.6.5servlet-apijavax.servletorg.apache.logging.log4jlog4j-slf4j-implorg.slf4jslf4j-log4j12<排除>org.apache.log4jorg.apache.hive.org.apache.log4jlog4jlog4j然后测试我们的Demo,成功!demo代码如下:publicvoidtest2()throwsException{//注册数据库驱动,使用hive的jdbc,驱动名固定硬编码Class.forName("org.apache.hive.jdbc.HiveDriver");//如果使用的是hive2服务,写jdbc:hive2,后面是hive服务器的ip和端口号。默认端口号为10000Connectionconn=DriverManager.getConnection("jdbc:hive2://1serverIP:10000/库名","Username","Password");语句stat=conn.createStatement();ResultSetrs=stat.executeQuery("selectapi_idfromidc.ods_duas_data_services_mngwherethedate='20220424'andapi_idregexp'companyInfo'");while(rs.next()){Stringapi_id=rs.getString("api_id");System.out.println(api_id);}stat.close();conn.close();}完美解决SpringBoot通过jdbc连接Hive的问题!如果这篇文章对你有帮助,别忘了给我三连,点赞、转发、评论,下期见。喜欢等于卖淫,喜欢才是真理。