本人使用的spark版本为2.2.1在现在(2018年01月03日18:29:48)是最新的了,HBASE用的1.4的
在开发的时候遇到了一个错
org.apache.spark.SparkException: Only one SparkContext may be running in this JVM (see SPARK-2243). To ignore this error, set spark.driver.allowMultipleContexts = true. The currently running SparkContext was created at:
org.apache.spark.SparkContext.<init>(SparkContext.scala:76)
org.apache.spark.streaming.StreamingContext$.createNewSparkContext(StreamingContext.scala:839)
org.apache.spark.streaming.StreamingContext.<init>(StreamingContext.scala:85)
CreateStreaming$.createStreamingContext(CreateStreaming.scala:73)
CreateStreaming$.main(CreateStreaming.scala:28)
CreateStreaming.main(CreateStreaming.scala)
at org.apache.spark.SparkContext$$anonfun$assertNoOtherContextIsRunning$2.apply(SparkContext.scala:2479)
at org.apache.spark.SparkContext$$anonfun$assertNoOtherContextIsRunning$2.apply(SparkContext.scala:2475)
at scala.Option.foreach(Option.scala:257)
at org.apache.spark.SparkContext$.assertNoOtherContextIsRunning(SparkContext.scala:2475)
at org.apache.spark.SparkContext$.setActiveContext(SparkContext.scala:2577)
at org.apache.spark.SparkContext.<init>(SparkContext.scala:2431)
at CreateStreaming$.createStreamingContext(CreateStreaming.scala:74)
at CreateStreaming$.main(CreateStreaming.scala:28)
at CreateStreaming.main(CreateStreaming.scala)
意思很简单是说你的Java虚拟机中已经有一个sparkContext了
为了解决这个问题我Google了一下 发现有人是这样解决的
在创建sparkContext的时候添加了
sparkConf.set("spark.driver.allowMultipleContexts", "true")
允许出现两个就可以忽略这个错
如果你这样做 ,恭喜你和我一样开始入坑了
在后边使用splContext 进行从sparkStearming中获取的数据时 你会死活都获取不到数据的
我的代码 一开始是这样的
val sparkConf=new SparkConf().setAppName(" Wirect Kafka Offset to Zookeeper")
val ssc=new StreamingContext(sparkConf,Seconds(10))//创建StreamingContext,每隔多少秒一个批次
val sc = new SparkContext(sparkConf)
val sqlcontext = new SQLContext(sc)
这样做很明显是用的sparkContext上下文不一致
解决了好几天 终于从坑里爬出来了
将代码改成了这样
val sparkConf=new SparkConf().setAppName(" Wirect Kafka Offset to Zookeeper")
val ssc=new StreamingContext(sparkConf,Seconds(10))//创建StreamingContext,每隔多少秒一个批次
val sc = ssc.sparkContext
val sqlcontext = new SQLContext(sc)
问题解决了