【发布时间】:2017-06-28 19:15:52
【问题描述】:
我正在执行一个 Spark Streaming 应用程序,并且我正在缓存 rdds 以进行历史回顾,我的批处理持续时间为一分钟,平均处理时间为 14 秒,因此执行程序不会计算整个批处理持续时间。执行程序也是如此,当我将 rdds 缓存在内存中时,它们仍然存在。如果执行者被搁置,我们是否应该认为这种搁置执行者是资源浪费。
【问题讨论】:
标签: apache-spark spark-streaming rdd
我正在执行一个 Spark Streaming 应用程序,并且我正在缓存 rdds 以进行历史回顾,我的批处理持续时间为一分钟,平均处理时间为 14 秒,因此执行程序不会计算整个批处理持续时间。执行程序也是如此,当我将 rdds 缓存在内存中时,它们仍然存在。如果执行者被搁置,我们是否应该认为这种搁置执行者是资源浪费。
【问题讨论】:
标签: apache-spark spark-streaming rdd
这取决于你想要达到的目标。
在 Spark 2.0 中,对Spark Streaming 启用了动态分配,没有错误。
问题是什么,如果您的数据工作量很大,如果您没有为接收数据保留至少一个执行程序,您可能会丢失数据。现在,Spark 2.0 解决了这个问题,并且数据的发布工作正常。
当大量数据到来时,将数据保存在缓存中有什么好处?您可以在没有随机播放的情况下处理您的数据,这可以增加您的响应时间。
但是,如果您的进程是 1 x 1 分钟。平均只需 14 秒即可处理您的数据。我建议你释放你的数据并释放你的工人为其他任务打开空间。
如果您没有足够的资源来处理您的任务,这些任务将排队并在您获得资源后立即处理。
有什么风险?如果您的 Yarn 中没有 preemption,如果您释放工作人员可能很难取回资源。这可能会浪费资源,具体取决于您的集群。
我要做的是:创建一些可以处理您的工作的队列。设置高优先级队列,在那里设置您的流式传输,其他队列中的其他作业并打开动态分配并释放缓存。如果您的应用程序需要更多资源,Yarn 会处理它。
【讨论】: