如何在 Hive 支持下创建 SparkSession(失败并显示“找不到 Hive 类”)?

2022-09-01 11:50:54

我在尝试运行以下代码时遇到错误:

import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;

public class App {
  public static void main(String[] args) throws Exception {
    SparkSession
      .builder()
      .enableHiveSupport()
      .getOrCreate();        
  }
}

输出:

Exception in thread "main" java.lang.IllegalArgumentException: Unable to instantiate SparkSession with Hive support because Hive classes are not found.
    at org.apache.spark.sql.SparkSession$Builder.enableHiveSupport(SparkSession.scala:778)
    at com.training.hivetest.App.main(App.java:21)

如何解决?


答案 1

将以下依赖项添加到 maven 项目中。

<dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-hive_2.11</artifactId>
        <version>2.0.0</version>
</dependency>

答案 2

tl;博士您必须确保 Spark SQL 的依赖项和所有传递依赖项在运行时在 Spark SQL 应用程序的 CLASSPATH 上可用(而不是仅编译所需的构建时间)。spark-hive


换句话说,您必须在 Spark 应用程序的 CLASSPATH 上具有 和 类(这与 sbt 或 maven 关系不大)。org.apache.spark.sql.hive.HiveSessionStateBuilderorg.apache.hadoop.hive.conf.HiveConf

前者是依赖关系的一部分(包括所有传递依赖关系)。HiveSessionStateBuilderspark-hive

后者是依赖关系的一部分(即上述依赖关系的传递依赖关系)。HiveConfhive-execspark-hive


推荐