Apache spark 如果spark结构化流媒体中的完整输出模式发生OOM,该怎么办
我是新手,正在学习spark结构化流媒体 我有以下使用complete作为输出模式的代码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
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?