【发布时间】:2017-07-09 00:07:16
【问题描述】:
我正在 Spark 1.6.2 下运行流式作业,该作业从队列中获取批次。我尝试了各种大小的内存和执行器的数量,例如:
spark-submit --class "MyStreamingClass" --master yarn --deploy-mode cluster --driver-memory 11g --executor-memory 11g
--num-executors 7 --conf spark.yarn.executor.memoryOverhead=256 mystuff-*.jar
每个批次都要求重新处理同一组数据,更新不断变化的值。即相同的结构,相同的尺寸, 相同的键,但值随每批更新。对于每个请求,从 队列并被传递到输入 DStream 增长。我认为这是调度程序延迟。这个值是可控的 在一定程度上通过调整内存和执行者的数量。问题是调度程序延迟随着每个批次而增长, 几个请求后可能需要几分钟。 Long 键永远不会改变,所以 HashPartitioner 使用相同的 每次都是钥匙。数据量很小,不到100M,但处理量大,需要跨节点分散。
为什么调度程序延迟会增长得如此之快,尤其是在密钥不变的情况下?我需要更改什么来稳定调度程序延迟?
【问题讨论】:
-
您的处理时间是否超过批处理间隔?
-
@NishantKumar - 它更长。但是,每个批次都是单独处理的。我正在提交一个批次,等待它清除,然后进入下一个。希望集群处于干净状态并处理每个批次,而不会受到前一个批次的干扰。
标签: apache-spark spark-streaming