2016-07-01 6 views
0

Ich habe diesen Funken Code unten:Mehr als ein Funken Kontext Fehler

import org.apache.hadoop.hbase.client._ 
    import org.apache.hadoop.hbase.{ HBaseConfiguration, HTableDescriptor } 
    import org.apache.hadoop.hbase.mapreduce.TableInputFormat 
    import org.apache.hadoop.hbase.io.ImmutableBytesWritable 
    import org.apache.hadoop.hbase.util.Bytes 

    import kafka.serializer.StringDecoder 

    import org.apache.spark._ 
    import org.apache.spark.SparkContext._ 
    import org.apache.spark.streaming._ 
    import org.apache.spark.streaming.kafka._ 

object Hbase { 
    def main(args: Array[String]) { 
      val sparkConf = new SparkConf().setAppName("Spark-Hbase").setMaster("local[2]") 
      val sc = new SparkContext(sparkConf) 

      ... 

      val ssc = new StreamingContext(sparkConf, Seconds(3)) 
      val kafkaBrokers = Map("metadata.broker.list" -> "localhost:9092") 
      val topics = List("test").toSet 
      val lines = KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](ssc, kafkaBrokers, topics) 
    } 
} 

Jetzt ist der Fehler, den ich bekommen habe ist:

Only one SparkContext may be running in this JVM (see SPARK-2243). To ignore this error, set spark.driver.allowMultipleContexts = true.

Gibt es etwas falsch mit meinem Code oben? Ich sehe nicht, wo ich den Kontext wieder erstelle ...

Antwort

5

Dies sind die beiden SparkContext, die Sie erstellen. Das ist nicht erlaubt.

val sc = new SparkContext(sparkConf) 
val ssc = new StreamingContext(sparkConf, Seconds(3)) 

Sie sollten den Streamingkontext aus dem ursprünglichen Kontext erstellen.

val ssc = new StreamingContext(sc, Seconds(3)) 
1

Sie initialisieren zwei Funken Kontext in der gleichen JVM, also (sparkContext und streamingContext). Deshalb erhalten Sie diese Ausnahme. Sie können spark.driver.allowMultipleContexts = true in der Konfiguration festlegen. Es wird jedoch von mehreren Spark-Kontexten abgeraten. Sie können unerwartete Ergebnisse erhalten.