Apache spark 如果spark结构化流媒体中的完整输出模式发生OOM,该怎么办

Apache spark 如果spark结构化流媒体中的完整输出模式发生OOM,该怎么办,apache-spark,Apache Spark,我是新手,正在学习spark结构化流媒体 我有以下使用complete作为输出模式的代码 import java.util.Date import org.apache.spark.sql.SparkSession import org.apache.spark.sql.streaming.Trigger import org.apache.spark.sql.types.StructType object StreamingWordCount { def main(args: Arra

我是新手,正在学习spark结构化流媒体

我有以下使用complete作为输出模式的代码

import java.util.Date

import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.streaming.Trigger
import org.apache.spark.sql.types.StructType

object StreamingWordCount {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession
      .builder
      .appName("StreamingWordCount")
      .config("spark.sql.shuffle.partitions", 1)
      .master("local[2]")
      .getOrCreate()

    import spark.implicits._

    val lines = spark
      .readStream
      .schema(new StructType().add("value", "string"))
      .option("maxFilesPerTrigger", 1)
      .text("file:///" + data_path)
      .as[String]

    val wordCounts = lines.flatMap(_.split(" ")).groupBy("value").count()

    val query = wordCounts.writeStream
      .queryName("t")
      .outputMode("complete")
      .format("memory")
      .start()


    while (true) {

      spark.sql("select * from t").show(truncate = false)
      println(new Date())
      Thread.sleep(1000)
    }


    query.awaitTermination()
  }
}
一个简单的问题是,随着时间的推移,spark运行时会记住太多的单词和计数状态,因此OOM应该在某个时候发生

我想问的是,在这种情况下,在实际操作中应该怎么做。

内存接收器应仅用于低数据量上的调试目的,因为整个输出将被收集并存储在驱动程序的内存中。输出将作为内存表存储在内存中

因此,如果发生OOM错误,驱动程序将崩溃,并且在驱动程序内存中维护的所有状态都将丢失


控制台水槽也是如此。

谢谢@lakshman battini。在完全输出模式下,即使是控制台接收器或其他接收器,如Kakfa接收器,驱动程序也会随着时间的推移崩溃,因为会有太多的状态,spark必须保持跟踪,所以我问在完全模式下,如何避免OOM。实际中何时使用Complete?