首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >5分钟Spark批处理作业与流作业

5分钟Spark批处理作业与流作业
EN

Stack Overflow用户
提问于 2019-07-24 00:09:55
回答 2查看 2K关注 0票数 0

我正在试着找出什么是更好的方法。

我有一个火花批处理作业,这是计划运行每5分钟,它需要2-3分钟来执行。

由于Spark 2.0已经添加了对动态分配spark.streaming.dynamicAllocation.enabled的支持,将其设置为每5分钟从源拉取数据的流式作业是一个好主意吗?

在流/批处理作业之间进行选择时,我应该记住哪些事项?

EN

回答 2

Stack Overflow用户

发布于 2019-07-24 01:35:16

在流和批处理之间做出决定时,需要考虑各种因素。我在下面列出了一些,根据你的用例,你可以决定哪一个更合适。

1) 输入数据特征-连续输入与批量输入

如果输入数据是批量到达的,则使用批处理。

否则,如果输入数据是连续到达的,流处理可能更有用。考虑其他因素以得出结论。

2) 输出延迟

如果所需的输出延迟非常小,请考虑流处理。

否则,如果输出延迟无关紧要,请选择批处理。

3) 批量大小(时间)

一般的经验法则是,如果批处理大小>1分钟,则使用批处理,否则需要流处理。这是因为批处理的触发/衍生增加了总处理时间的延迟。

4) 资源使用

集群中资源的使用模式是什么?

是否有更多的批处理作业在其他批处理作业完成后执行?使多个批处理作业一个接一个地运行,并以最佳方式使用集群资源。那么使用批处理作业是更好的选择。

批处理作业在其调度时间运行,在此之后集群中的资源处于空闲状态。考虑运行流式作业如果数据连续到达,则处理所需的资源可能会更少,并且输出将变得可用,延迟更短。

还有其他需要考虑的事情-回放,可管理性(流媒体更复杂),团队的现有技能等。

关于spark.streaming.dynamicAllocation.enabled,的,我会避免使用它,因为如果输入的速率变化很大,执行器将被频繁地终止和创建,这将增加延迟。

票数 1
EN

Stack Overflow用户

发布于 2019-07-24 00:30:27

Spark流媒体是一项过时的技术。它的后继者是结构化流媒体。

如果你每隔5分钟进行一次处理,那么你就需要进行批处理。您可以使用结构化流框架,并每隔5分钟触发一次,以模拟批处理,但我通常不会这样做。

结构化流媒体比普通的Spark有更多的限制。例如,您只能写入Kafka或一个文件,否则您需要使用Foreach接收器自己实现接收器。同样,如果你使用一个文件接收器,那么你不能更新它,而只能追加到它。此外,还有一些操作在结构化流式传输中不受支持,还有一些操作只有在之前执行聚合操作后才能执行。

如果我从Kafka读取或写入Kafka,我可能会使用结构化Straming进行批处理,因为它们在一起工作得很好,而且所有东西都是预先实现的。使用结构化流式传输的另一个优点是,您可以自动从您停止阅读的位置继续阅读。

有关更多信息,请参阅Structured Streaming Programming Guide

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57168267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档