我有这段代码,它给出的错误基本路径必须是目录。只想运行一个简单的流kafkaSink。
val checkPointDir = "/tmp/offsets/" // "hdfs://hdfscluster/user/yarn/tmp/"
def main(args: Array[String]): Unit ={
lazy val spark = SparkSession
.builder
.appName("KafkaProducer")
.master("local[*]")
.getOrCreate()
val query = writeStream(jsonDF, "test")
query.awaitTermination()
}
def writeStream(df:DataFrame, topic:String): StreamingQuery = {
// log.warn("Writing to kafka")
df
// .selectExpr( "CAST(value AS STRING)")
.writeStream
.format("kafka")
.option("kafka.bootstrap.servers", kafkaServers)
.option("topic", topic)
.option("checkpointLocation", checkPointDir)
.outputMode(OutputMode.Update)
.start()
}
我的用户是此文件夹/ tmp / offsets的所有者。我遇到了这个例外。
java.lang.IllegalArgumentException:选项'basePath'必须是目录
答案 0 :(得分:0)
"checkpointLocation"
提供目录的规范路径。
此目录用于存储实际的中间RDD。如果存在多个检查点,则可以存储多个RDD。每个RDD的数据都存储在一个单独的目录中。但是,RDD本身是分区的,每个分区都存储在RDD目录内的单独文件中。在HDFS中存储文件时,Spark必须遵守最大块大小属性。这样的结构化数据无法存储在单个文件中,因此无法存储在目录中。