You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IntelliJ中通过sbt引入依赖实现Scala连接Hive数据库的问题求助

问题解决方案

1. sbt依赖引入方案

完全可以通过sbt添加依赖的方式解决jar包导入问题,无需手动往项目结构中上传jar包。注意依赖版本必须和你Ubuntu服务器上部署的Hive、Hadoop大版本完全匹配,否则会出现类不兼容、连接异常等问题。

以下是Hive 2.3.x + Hadoop 2.7.x版本的参考依赖配置,你可以根据自己服务器的实际版本修改版本号:

libraryDependencies ++= Seq(
  "org.apache.hive" % "hive-jdbc" % "2.3.9",
  "org.apache.hadoop" % "hadoop-common" % "2.7.7"
)

如果sbt拉取依赖速度慢,可以在sbt配置中添加国内镜像源加速。

2. 现有代码问题修正

你当前的测试代码存在两处核心错误:

  • 驱动类路径错误:Hive 2.x及以上版本的JDBC驱动类为org.apache.hive.jdbc.HiveDriver,你使用的是Hive 1.x的旧路径
  • JDBC URL格式错误:无需添加http前缀,正确格式为jdbc:hive2://服务器IP:10000/数据库名

修正后的完整可运行代码如下:

import java.sql.{Connection, DriverManager, ResultSet, Statement}

object HiveJdbcClient extends App {
  val driverName = "org.apache.hive.jdbc.HiveDriver"
  Class.forName(driverName)
  
  // 若Hive配置了用户名密码,直接填入第二、第三个参数即可
  val con = DriverManager.getConnection("jdbc:hive2://192.168.43.64:10000/default", "", "")
  val stmt = con.createStatement()
  val tableName = "testHiveDriverTable"
  
  // DDL操作建议使用execute方法而非executeQuery
  stmt.execute(s"drop table if exists $tableName")
  stmt.execute(s"create table $tableName (key int, value string)")
  
  // 全表查询测试
  var sql = s"select * from $tableName"
  var res = stmt.executeQuery(sql)
  while (res.next()) {
    println(s"${res.getInt(1)}\t${res.getString(2)}")
  }
  
  // 聚合查询测试
  sql = s"select count(1) from $tableName"
  res = stmt.executeQuery(sql)
  while (res.next()) {
    println(res.getString(1))
  }
  
  // 关闭资源避免连接泄漏
  res.close()
  stmt.close()
  con.close()
}

3. 服务器端前置检查

运行代码前请确认Ubuntu服务器上的配置符合要求:

  • HiveServer2服务已启动:执行ps -ef | grep HiveServer2确认进程存在,若未启动则执行hive --service hiveserver2 &启动服务
  • 10000端口对外开放:检查防火墙规则,开放10000端口或临时关闭防火墙进行测试
  • 远程访问权限已开启:确认hive-site.xml中hive.server2.thrift.bind.host配置为0.0.0.0或服务器实际网卡IP,而非127.0.0.1

4. 可选方案:Spark连接Hive

你的环境已部署Spark,在Scala生态下使用Spark连接Hive更便捷,无需单独引入JDBC依赖,只需将服务器上的hive-site.xml放到项目resources目录下即可,参考代码如下:

import org.apache.spark.sql.SparkSession

object SparkHiveTest extends App {
  val spark = SparkSession.builder()
    .appName("HiveConnectTest")
    .master("local[*]") // 生产环境提交到集群运行时删除该配置
    .enableHiveSupport()
    .getOrCreate()
  
  spark.sql("select * from default.testHiveDriverTable").show()
  spark.stop()
}

内容的提问来源于stack exchange,提问作者Tiger Blood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 20:06:00