Apache spark 为什么Spark Streaming仅在终止后才启动作业?
我有一个非常简单的spark流媒体作业,在独立模式下本地运行。有一个客户接收器,它从数据库中读取数据并将其传递给主作业,主作业打印总数。这不是一个实际的用例,但我正在四处学习。问题是这个作业会永远卡住,逻辑非常简单,所以我认为它既不会做任何处理,也不会出现内存问题。奇怪的是,如果我停止作业,我会突然在日志中看到作业执行的输出和其他备份作业的输出!有人能帮我理解这里发生了什么吗Apache spark 为什么Spark Streaming仅在终止后才启动作业?,apache-spark,spark-streaming,Apache Spark,Spark Streaming,我有一个非常简单的spark流媒体作业,在独立模式下本地运行。有一个客户接收器,它从数据库中读取数据并将其传递给主作业,主作业打印总数。这不是一个实际的用例,但我正在四处学习。问题是这个作业会永远卡住,逻辑非常简单,所以我认为它既不会做任何处理,也不会出现内存问题。奇怪的是,如果我停止作业,我会突然在日志中看到作业执行的输出和其他备份作业的输出!有人能帮我理解这里发生了什么吗 val spark = SparkSession .builder() .master("local[1]")
val spark = SparkSession
.builder()
.master("local[1]")
.appName("SocketStream")
.getOrCreate()
val ssc = new StreamingContext(spark.sparkContext,Seconds(5))
val lines = ssc.receiverStream(new HanaCustomReceiver())
lines.foreachRDD{x => println("==============" + x.count())}
ssc.start()
ssc.awaitTermination()
终止程序后,按照日志滚动显示批处理的执行情况-
17/06/05 15:56:16 INFO JobGenerator: Stopping JobGenerator immediately
17/06/05 15:56:16 INFO RecurringTimer: Stopped timer for JobGenerator after time 1496696175000
17/06/05 15:56:16 INFO JobGenerator: Stopped JobGenerator
==============100
TL;DR至少使用
本地[2]
问题如下:
.master("local[1]")
在Spark Streaming中,您应该至少有2个线程用于接收器,否则您的流媒体作业甚至没有机会启动,因为它们无法等待资源,即分配一个空闲线程
引用Spark Streaming的:
//主机需要2个内核以防止出现饥饿情况
我的建议是使用local[2]
(最小值)或local[*]
来获取尽可能多的内核。最好的解决方案是使用集群管理器,如ApacheMesos、Hadoop Thread或Spark Standalone