我在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增长。我认为这是Scheduler Delay。该值可控制 在某种程度上通过调整执行程序的内存和数量。问题是Scheduler Delay随着每个批处理而增长, 几次请求后可能需要几分钟。 Long键永远不会改变,因此HashPartitioner使用相同的键 钥匙每次。它是少量数据,小于100M,但处理范围很广,需要跨节点分布。
为什么Scheduler Delay会如此迅速地增长,特别是因为密钥不会改变?我需要更改什么才能稳定Scheduler Delay?
答案 0 :(得分:0)
我在这里发现的是,某些处理时间比批处理时间长。在这种情况下,框架永远无法赶上。解决方案是减少批处理时间,或通过增加资源或优化使处理适合批处理时间。