2016-09-12 20 views
8

Bu kodu çalıştırmaya çalışırken bu hatayı alıyorum.Hive desteğiyle SparkSession nasıl oluşturulur ("Hive sınıfları bulunamadı")?

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

     } 
} 

Çıktı: iplik "ana" java.lang.IllegalArgumentException içinde

İstisna: Hive sınıfları bulunmayan çünkü kovan desteği ile SparkSession örneğini edilemiyor. org.apache.spark.sql.SparkSession $ Builder.enableHiveSupport (SparkSession.scala: 778) de com.training.hivetest.App.main de (App.java:21)

Nasıl olabilir çözüldü?

cevap

13

Maven projenize aşağıdaki bağımlılığı ekleyin.

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

Ben kıvılcım hive_2.11-2.0.1 .jar ama yine de hata alıyorum (sadece jar'i sınıf yoluna ekledim - Maven'e bağımlılık eklemedi) –

+0

@ Sam-T "org.apache.spark.sql.hive. *; " java sınıfınızda? Bunu maven'e eklemeyi ve maven projesini güncellemeyi denedin mi? – abaghel

1

Ben kaynak koduna baktım ve HiveSessionState rağmen başka sınıf HiveConf (kıvılcım-kovanı içinde) da SparkSession başlatmak için gerekli olduğunu tespit ettik. Ve HiveConf kıvılcım kovanı * kavanozunda mevcut değildir, belki kovanla ilgili kavanozlarda bulabilir ve sınıf yolunuza koyabilirsiniz.

1

Aynı problem vardı. Aşağıdaki bağımlılıkları ekleyerek çözebilirim. (I compile dependencies section of spark-hive_2.11 mvn repository page referansla bu listeyi çözüldü):

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

burada scala.binary.version = 2.11 ve spark.version = 2.1.0

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