为什么流查询不将任何数据写入HDFS?

时间:2018-12-12 19:53:21

标签: scala apache-spark spark-structured-streaming

我在Spark 2.3.1中使用Spark结构化流,以下是我的代码:

val sparkSession = SparkSession
.builder
.appName("xxx")
.config("spark.serializer", 
  "org.apache.spark.serializer.KryoSerializer")
.config("spark.rpc.netty.dispatcher.numThreads", "2")
.config("spark.shuffle.compress", "true")
.config("spark.rdd.compress", "true")
.config("spark.sql.inMemoryColumnarStorage.compressed", "true")
.config("spark.io.compression.codec", "snappy")
.config("spark.broadcast.compress", "true")
.config("spark.sql.hive.thriftServer.singleSession", "true")
.config("hive.exec.dynamic.partition", "true")
.config("hive.exec.dynamic.partition.mode", "nonstrict")
.config("spark.streaming.receiver.writeAheadLog.enable","true")
.enableHiveSupport()
.getOrCreate()

val rawStreamDF = sparkSession
.readStream
.format("kafka")
.option("kafka.bootstrap.servers", <value>)
.option("subscribe", <value>)
.option("key.serializer", <value>)
.option("value.serializer", <value>)
.option("startingOffsets", "earliest")
.option("auto.offset.reset",earliest)
.option("group.id",  <value>)
.option("fetchOffset.numRetries", 3)
.option("fetchOffset.retryIntervalMs", 10)
.option("IncludeTimestamp", true)
.option("enable.auto.commit",  <value>)
.option("security.protocol",  <value>)
.option("ssl.keystore.location",  <value>)
.option("ssl.keystore.password",  <value>)
.option("ssl.truststore.location",  <value>)
.option("ssl.truststore.password",  <value>)
.load()
.selectExpr("CAST(key AS STRING)", "CAST(value AS STRING)")
.as[(String, String)]

我正在尝试将数据写入hdfs_path中的文件:

val query = rawStreamDF
  .writeStream
  .format("json")
  .option("startingOffsets", "latest")
  .option("path", "STREAM_DATA_PATH")
  .option("checkpointLocation", "checkpointPath")
  .trigger(Trigger.ProcessingTime("5 seconds"))
  .outputMode("append")
  .start

Logger.log.info("Status:"+query.status)
print("Streaming Status1:"+query.status)

query.awaitTermination(450)

但是,我得到的query.status值如下:

Status:{ "message" : "Initializing sources", "isDataAvailable" : false, "isTriggerActive" : false }

你能让我知道我要去哪里了吗?

1 个答案:

答案 0 :(得分:0)

  

但是,我得到的query.status值如下。

Status:{ "message" : "Initializing sources", "isDataAvailable" :false, "isTriggerActive" : false }
     

你能让我知道我要去哪里了吗?

一切似乎都很好。 Spark Structured Streaming的流引擎似乎尚未启动查询,只是将其标记为在单独的线程上启动。

如果您创建了一个单独的线程来监视结构化查询,您会注意到状态在处理第一批后就将更改。

请咨询Structured Streaming Programming Guide中的官方文档。