2016-09-12 2 views
8

जब मैं इस कोड को चलाने का प्रयास कर रहा हूं तो मुझे यह त्रुटि मिल रही है।हाइव समर्थन के साथ स्पार्कसेशन कैसे बनाएं ("हाइव क्लासेस नहीं मिला" में विफल रहता है?

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

     } 
} 

आउटपुट:

धागा "मुख्य" java.lang.IllegalArgumentException में अपवाद: हाइव समर्थन के साथ SparkSession का दृष्टांत क्योंकि हाइव कक्षाएं नहीं पाए जाते हैं असमर्थ। org.apache.spark.sql.SparkSession $ Builder.enableHiveSupport (SparkSession.scala: 778) में com.training.hivetest.App.main पर (App.java:21)

यह कैसे हो सकता है हल हो गई?

उत्तर

13

अपने मेवेन प्रोजेक्ट पर निम्नलिखित निर्भरता जोड़ें।

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

मैं चिंगारी hive_2.11-2.0.1 .jar लेकिन मुझे अभी भी त्रुटि मिलती है (मैंने मैन्युअल रूप से कक्षा पथ में जार जोड़ा - मेवेन पर निर्भरता नहीं जोड़ा) –

+0

@ सैम-टी क्या आप "org.apache.spark.sql.hive आयात कर सकते हैं। *; " अपने जावा वर्ग में? क्या आपने इसे मैवेन में जोड़ने का प्रयास किया और फिर मेवेन प्रोजेक्ट अपडेट किया? – abaghel

1

मैं स्रोत कोड में देखा है, और पाया कि HiveSessionState के बावजूद (में चिंगारी से छत्ता), एक और वर्ग HiveConf भी SparkSession आरंभ करने के लिए की जरूरत है। और हाइवकॉन्फ़ स्पार्क-हाइव * जार में निहित नहीं है, शायद आप इसे हाइव से संबंधित जार में पा सकते हैं और इसे अपने क्लासपाथ में डाल सकते हैं।

1

मुझे एक ही समस्या थी। मैं निम्नलिखित निर्भरताओं को जोड़कर इसे हल कर सकता हूं। (मैं compile dependencies section of spark-hive_2.11 mvn repository page हवाला देते हुए इस सूची हल हो गई):

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