如何创建具有 Hive 支持的 SparkSession(因“未找到 Hive 类”而失败)?

新手上路,请多包涵

尝试运行以下代码时出现错误:

 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)

如何解决?

原文由 Subhadip Majumder 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
2 个回答

将以下依赖项添加到您的 Maven 项目。

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

原文由 abaghel 发布,翻译遵循 CC BY-SA 3.0 许可协议

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


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

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

后者 HiveConfhive-exec 依赖的一部分(这是上述 spark-hive 依赖的传递依赖)。

原文由 Jacek Laskowski 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题