Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何在Spark 2.1中编写和更新kudu API_Scala_Apache Spark_Apache Kudu - Fatal编程技术网

Scala 如何在Spark 2.1中编写和更新kudu API

Scala 如何在Spark 2.1中编写和更新kudu API,scala,apache-spark,apache-kudu,Scala,Apache Spark,Apache Kudu,我想用Kudu API编写和更新。 这是maven依赖项: <dependency> <groupId>org.apache.kudu</groupId> <artifactId>kudu-client</artifactId> <version>1.1.0</version> </dependency> <dependency> <groupId>org.ap

我想用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>
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)


将Kudu的版本更新为最新版本(当前为1.5.0)。
KuduContext
SparkContext
作为更高版本中的输入参数,这将防止出现此问题

另外,在
foreachRDD
之外执行初始火花初始化。在您提供的代码中,将
spark
kuduContext
移出foreach。此外,您不需要创建单独的
sparkConf
,只可以使用较新的
SparkSession

val spark = SparkSession.builder.appName("DirectKafka").master("local[*]").getOrCreate()
import spark.implicits._

val kuduContext = new KuduContext("master:7051", spark.sparkContext)
val bb = spark.read.options(Map("kudu.master" -> "master:7051", "kudu.table" -> "table")).kudu

val messages = KafkaUtils.createDirectStream("")
messages.foreachRDD(rdd => {   
  // do something with the bb table and messages       
})

看起来你已经有了一个活跃的SparkContext(既然您是从
rdd.sparkContext.getConf
获取配置的。为什么要创建一个新的配置?我在spark2 shell中运行默认包含sparksession的代码。如果您使用spark shell,您不需要maven依赖项。启动shell时包含kudu jar。我可能会误导您。我现在已经更新了我的问题。您应该顶级制作/为每个RDD@cricket_007获得一个新的SparkSession和KuduContext。使用kudu-spark2_2.11_1.1.0,似乎只有一个参数KuduContext(org.apache.kudu.spark.kudu)在foreachRDD内部由于spark streaming doc而触发初始化。out foreachRD有val ssc=新的StreamingContext(sparkConf,秒(2)@秋:在foreach中不应该有这样的初始化。你在哪里看到的?它是doc:@秋:查看文档中的链接,他们实际定义了一个
SparkSessionSingleton
对象,在循环中使用。
val spark = SparkSession.builder.appName("DirectKafka").master("local[*]").getOrCreate()
import spark.implicits._

val kuduContext = new KuduContext("master:7051", spark.sparkContext)
val bb = spark.read.options(Map("kudu.master" -> "master:7051", "kudu.table" -> "table")).kudu

val messages = KafkaUtils.createDirectStream("")
messages.foreachRDD(rdd => {   
  // do something with the bb table and messages       
})