选项“ basePath”必须是目录Scala

时间:2018-07-02 16:59:28

标签: scala apache-spark apache-kafka

我有这段代码,它给出的错误基本路径必须是目录。只想运行一个简单的流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'必须是目录

1 个答案:

答案 0 :(得分:0)

应为

"checkpointLocation"提供目录的规范路径。

此目录用于存储实际的中间RDD。如果存在多个检查点,则可以存储多个RDD。每个RDD的数据都存储在一个单独的目录中。但是,RDD本身是分区的,每个分区都存储在RDD目录内的单独文件中。在HDFS中存储文件时,Spark必须遵守最大块大小属性。这样的结构化数据无法存储在单个文件中,因此无法存储在目录中。