Him*_*dav 3 apache-spark spark-structured-streaming
我有一个 Spark Structured Streaming 作业,它从 Kafka 主题读取偏移量并将其写入 aerospike 数据库。目前,我正在准备这项工作生产并实施SparkListener.
在阅读文档时,我偶然发现了这个例子:
Run Code Online (Sandbox Code Playgroud)StreamingQuery query = wordCounts.writeStream() .outputMode("complete") .format("console") .start(); query.awaitTermination();执行此代码后,流式计算将
在后台启动。查询对象是该活动
流查询的句柄,我们决定
使用 awaitTermination()等待查询终止,以防止进程
在查询处于活动状态时退出。
我知道它在终止进程之前等待查询完成。
它到底是什么意思?它有助于避免查询写入的数据丢失。
当查询每天写入数百万条记录时,它有何帮助?
我的代码看起来很简单:
dataset.writeStream()
.option("startingOffsets", "earliest")
.outputMode(OutputMode.Append())
.format("console")
.foreach(sink)
.trigger(Trigger.ProcessingTime(triggerInterval))
.option("checkpointLocation", checkpointLocation)
.start();
Run Code Online (Sandbox Code Playgroud)
Jac*_*ski 10
这里有很多问题,但只回答下面的一个就可以回答所有问题。
我知道它在终止进程之前等待查询完成。它到底是什么意思?
流查询在单独的守护线程中运行。在 Java 中,守护线程用于允许并行处理,直到 Spark 应用程序的主线程完成(dies)。在最后一个非守护线程完成后,JVM 关闭,整个 Spark 应用程序完成。
这就是为什么您需要让主非守护线程等待其他守护线程,以便它们可以完成它们的工作。
| 归档时间: |
|
| 查看次数: |
3189 次 |
| 最近记录: |