Как создать 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 {
        String warehouseLocation = "file:" + System.getProperty("user.dir") + "spark-warehouse";
        SparkSession spark = SparkSession
          .builder().master("local")
          .appName("Java Spark Hive Example")
          .config("spark.sql.warehouse.dir", warehouseLocation).enableHiveSupport()
          .getOrCreate();

        String path = "/home/cloudera/Downloads/NetBeansProjects/sparksql1/src/test/Employee.json";

        spark.sql("CREATE TABLE IF NOT EXISTS src (key INT, value STRING)");
        spark.sql("LOAD DATA LOCAL INPATH '"+path+"' INTO TABLE src");



        //load from HDFS

         Dataset<Row> df = spark.read().json(path);

         df.registerTempTable("temp_table");

         spark.sql("create table TEST.employee as select * from temp_table");

         df.printSchema();
         df.show();

        }
}

Вывод:

Исключение в потоке "main" java.lang.IllegalArgumentException: невозможно создать экземпляр SparkSession с поддержкой Hive, поскольку классы Hive не найдены.     at org.apache.spark.sql.SparkSession $Builder.enableHiveSupport(SparkSession.scala: 778)     at com.training.hivetest.App.main(App.java21)

Как это можно решить?

Ответ 1

Добавьте следующую зависимость к вашему проекту maven.

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

Ответ 2

Я изучил исходный код и обнаружил, что, несмотря на HiveSessionState (в искровом улье), для запуска SparkSession необходим еще один класс HiveConf. И HiveConf не содержится в банке искрового улья *, возможно, вы можете найти его в кустах, связанных с кустом, и поместить их в свой путь к классам.

Ответ 3

У меня была та же проблема. Я мог бы решить эту проблему, добавив следующие зависимости. (Я разрешил этот список, обратив раздел зависимостей компиляции на странице репозитория spark-hive_2.11 mvn):

 <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-hive_${scala.binary.version}</artifactId>
            <version>${spark.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.calcite</groupId>
            <artifactId>calcite-avatica</artifactId>
            <version>1.6.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.calcite</groupId>
            <artifactId>calcite-core</artifactId>
            <version>1.12.0</version>
        </dependency>
        <dependency>
            <groupId>org.spark-project.hive</groupId>
            <artifactId>hive-exec</artifactId>
            <version>1.2.1.spark2</version>
        </dependency>
        <dependency>
            <groupId>org.spark-project.hive</groupId>
            <artifactId>hive-metastore</artifactId>
            <version>1.2.1.spark2</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.9.13</version>
        </dependency>

где scala.binary.version = 2.11 и spark.version = 2.1.0

 <properties>
      <scala.binary.version>2.11</scala.binary.version>
      <spark.version>2.1.0</spark.version>
    </properties>

Ответ 4

Мой полный список зависимостей для Spark 2.4.1 здесь

  <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-hive_2.12</artifactId>
      <version>2.4.1</version>
  </dependency>

  <dependency>
      <groupId>org.apache.calcite</groupId>
      <artifactId>calcite-avatica</artifactId>
      <version>1.6.0</version>
  </dependency>
  <dependency>
      <groupId>org.apache.calcite</groupId>
      <artifactId>calcite-core</artifactId>
      <version>1.12.0</version>
  </dependency>
  <dependency>
      <groupId>org.spark-project.hive</groupId>
      <artifactId>hive-exec</artifactId>
      <version>1.2.1.spark2</version>
  </dependency>
  <dependency>
      <groupId>org.spark-project.hive</groupId>
      <artifactId>hive-metastore</artifactId>
      <version>1.2.1.spark2</version>
  </dependency>
  <dependency>
      <groupId>org.codehaus.jackson</groupId>
      <artifactId>jackson-mapper-asl</artifactId>
      <version>1.9.13</version>
  </dependency>

  <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
  <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.6.7</version>
  </dependency>

  <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
  <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.6.7.1</version>
  </dependency>


  <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
  <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.6.7</version>
  </dependency>

  <!-- https://mvnrepository.com/artifact/org.codehaus.janino/janino -->
  <dependency>
      <groupId>org.codehaus.janino</groupId>
      <artifactId>janino</artifactId>
      <version>3.0.9</version>
  </dependency>

  <!-- https://mvnrepository.com/artifact/org.codehaus.janino/commons-compiler -->
  <dependency>
      <groupId>org.codehaus.janino</groupId>
      <artifactId>commons-compiler</artifactId>
      <version>3.0.9</version>
  </dependency>

Ответ 5

[Обновление моего ответа] Этот ответ на StackOverflow является верной ссылкой.

Я также столкнулся с проблемами сборки и запуска Spark с HiveSupport. На основании приведенного выше ответа я сделал следующее в своем проекте Spark 2.12.8.

  1. Обновил мой build.sbt до следующего содержания
  2. Вручную удалил файлы в .idea/library
  3. Нажал кнопку "Обновить все проекты sbt" в окне SBT Shell (я использую intellij)

Теперь я могу запустить проект без каких-либо проблем.

libraryDependencies += "junit" % "junit" % "4.12" % Test
libraryDependencies ++= Seq(
  "org.apache.spark" %% "spark-core" % "2.4.2",
  "org.apache.spark" %% "spark-sql" % "2.4.2",
  "org.apache.spark" %% "spark-hive" % "2.4.2" % "provided",
  "org.scalatest" %% "scalatest" % "3.0.3" % Test
)