web-dev-qa-db-fra.com

Comment créer SparkSession avec le support Hive (échoue avec "Les classes Hive ne sont pas trouvées")?

J'obtiens cette erreur lorsque j'essaie d'exécuter ce code.

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();

        }
}

Production:

Exception dans le thread "principal" Java.lang.IllegalArgumentException: Impossible d'instancier SparkSession avec le support Hive car les classes Hive sont introuvables. à org.Apache.spark.sql.SparkSession $ Builder.enableHiveSupport (SparkSession.scala: 778) à com.training.hivetest.App.main (App.Java:21)

Comment peut-il être résolu?

16
Subhadip Majumder

Ajoutez la dépendance suivante à votre projet maven.

<dependency>
        <groupId>org.Apache.spark</groupId>
        <artifactId>spark-Hive_2.11</artifactId>
        <version>2.0.0</version>
</dependency>
27
abaghel

J'ai examiné le code source et j'ai découvert que malgré HiveSessionState (dans spark-Hive), une autre classe HiveConf est également nécessaire pour lancer SparkSession. Et HiveConf n'est pas contenu dans le pot spark-Hive * , vous pouvez peut-être le trouver dans les pots liés à Hive et le mettre dans votre chemin de classe.

3
xuchuanyin

J'ai eu le même problème. Je pourrais le résoudre en ajoutant les dépendances suivantes. (J'ai résolu cette liste en faisant référence compiler la section des dépendances de la page du référentiel mvn spark-Hive_2.11 ):

 <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>

où scala.binary.version = 2.11 et spark.version = 2.1.0

 <properties>
      <scala.binary.version>2.11</scala.binary.version>
      <spark.version>2.1.0</spark.version>
    </properties>
2
Sruthi Poddutur

[Mise à jour de ma réponse] Cette réponse sur StackOverflow est juste - lien de réponse .

J'ai également rencontré des problèmes pour créer et exécuter Spark avec HiveSupport. Sur la base de la réponse ci-dessus, j'ai fait ce qui suit dans mon projet Spark 2.12.8).

  1. Mise à jour de mon build.sbt au contenu ci-dessous
  2. Suppression manuelle des fichiers dans .idea/bibliothèques
  3. Cliquez sur le bouton "Actualiser tous les projets sbt" dans la fenêtre SBT Shell (j'utilise Intellij)

Je peux maintenant exécuter le projet sans aucun problème.

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
)
0
Kevin Lawrence

Ma liste complète des dépendances pour Spark 2.4.1 est ici

  <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>
0
Harry Nguyen

Pour [~ # ~] sbt [~ # ~] Utilisez
// https://mvnrepository.com/artifact/org.Apache.spark/spark-Hive

libraryDependencies += "org.Apache.spark" %% "spark-Hive" % "2.1.0"


Nous avons utilisé Spark-Core-2.1.0 et Spark-SQL-2.1.0

0
Sachin Patil