Ubuntu环境下Java通过JDBC连接Hive的编译报错及jar包放置问题
问题解决步骤
1. 先修正Java代码错误
你现有代码存在两处核心问题:缺少必要的import导入、JDBC URL前缀错误,修正后的完整代码如下:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; public class HiveCreateDb { private static String driverName = "org.apache.hive.jdbc.HiveDriver"; public static void main(String[] args) throws SQLException { // 注册驱动 try { Class.forName(driverName); } catch (ClassNotFoundException e) { e.printStackTrace(); System.exit(1); } // 获取连接,Hive 2.x/3.x版本JDBC前缀为jdbc:hive2 Connection con = DriverManager.getConnection("jdbc:hive2://localhost:10000/default", "", ""); Statement stmt = con.createStatement(); // 增加IF NOT EXISTS避免库已存在时报错 stmt.execute("CREATE DATABASE IF NOT EXISTS userdb"); System.out.println("Database userdb created successfully."); stmt.close(); con.close(); } }
2. Jar包放置要求
hive-jdbc-3.1.2.jar不需要放置到系统固定目录,直接放到和HiveCreateDb.java同目录下即可,编译和运行时手动指定依赖路径即可。
注意:hive-jdbc包本身不是独立运行包,如果后续运行时报类缺失错误,建议直接把Hive安装目录下
lib路径的所有jar包、Hadoop安装目录下share/hadoop/common和share/hadoop/common/lib路径的所有jar包都加入依赖路径,避免缺包。
3. 解决编译报错的方法
你之前的编译命令没有指定依赖的jar包路径,导致编译器无法识别JDBC相关类,修改编译命令如下:
javac -cp .:hive-jdbc-3.1.2.jar HiveCreateDb.java
参数说明:
-cp是-classpath缩写,用于指定编译时的类依赖路径.代表当前目录,用来加载你自己编写的类文件- 冒号
:是Linux环境下classpath的分隔符
4. 运行命令
编译通过后,运行时同样需要指定依赖路径:
# 仅依赖单个hive-jdbc包的运行命令 java -cp .:hive-jdbc-3.1.2.jar HiveCreateDb # 缺包时使用全依赖路径,示例中Hive安装路径为/opt/hive,Hadoop安装路径为/opt/hadoop,替换为你自己的安装路径即可 java -cp .:/opt/hive/lib/*:/opt/hadoop/share/hadoop/common/*:/opt/hadoop/share/hadoop/common/lib/* HiveCreateDb
内容的提问来源于stack exchange,提问作者Venus
相关产品推荐
相关产品推荐

