【发布时间】:2018-01-10 16:28:52
【问题描述】:
我想通过 Kudu API 编写和更新。 这是maven依赖:
<dependency>
<groupId>org.apache.kudu</groupId>
<artifactId>kudu-client</artifactId>
<version>1.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.kudu</groupId>
<artifactId>kudu-spark2_2.11</artifactId>
<version>1.1.0</version>
</dependency>
在下面的代码中,我对KuduContext参数一无所知。
我在 spark2-shell 中的代码:
val kuduContext = new KuduContext("master:7051")
Spark 2.1 流中也出现同样的错误:
import org.apache.kudu.spark.kudu._
import org.apache.kudu.client._
val sparkConf = new SparkConf().setAppName("DirectKafka").setMaster("local[*]")
val ssc = new StreamingContext(sparkConf, Seconds(2))
val messages = KafkaUtils.createDirectStream("")
messages.foreachRDD(rdd => {
val spark = SparkSession.builder.config(rdd.sparkContext.getConf).getOrCreate()
import spark.implicits._
val bb = spark.read.options(Map("kudu.master" -> "master:7051","kudu.table" -> "table")).kudu //good
val kuduContext = new KuduContext("master:7051") //error
})
然后报错:
org.apache.spark.SparkException: 只有一个 SparkContext 可能正在运行 在这个 JVM 中(参见 SPARK-2243)。要忽略此错误,请设置 spark.driver.allowMultipleContexts = true。当前运行的 SparkContext 创建于: org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:860)
【问题讨论】:
-
您似乎已经有一个活动的 SparkContext(因为您从
rdd.sparkContext.getConf获得了配置。为什么要创建一个新的? -
我在 spark2-shell 中运行代码,默认包含 sparksession。
-
如果您使用 spark-shell,则不需要 maven 依赖项。启动 shell 时包含 kudu jar。
-
我可能会误导你。我现在更新了我的问题。
-
你应该停止为每个 RDD 制作/获取新的 SparkSession 和 KuduContext
标签: scala apache-spark apache-kudu