我想运行2个火花流工作,并为批处理作业和其他操作保留一些可用资源。
我评估了Spark Standalone集群管理器,但我意识到我必须为两个作业修复资源,这几乎不会给批处理作业留下任何计算能力。
我开始评估Mesos,因为它具有细粒度"执行模型,其中资源在Spark应用程序之间转移。
1)是否意味着单个核心可以在2个 流式 应用程序之间切换?
2)虽然我有火花& cassandra,为了利用数据局部性,我是否需要在每台从机上都有专用核心以避免混乱?
3)你会建议在"细粒度"中运行流媒体作业或"课程粒度"模式。我知道逻辑答案是课程粒度(为了最大限度地减少流媒体应用程序的延迟),但是当整个集群中的资源有限时(3个节点的集群,每个4个核心 - 有2个流应用程序可以运行并且多次不时)批处理工作)
4)在Mesos中,当我在集群模式下运行spark streaming job时,它是否会永久占用1个核心(就像独立集群管理器正在做的那样),或者该核心是否会执行驱动程序进程,有时还会充当执行程序?
谢谢
答案 0 :(得分:2)
现在实际上已弃用细粒度模式。即使使用它,每个核心也会分配给任务直到完成,但在Spark Streaming中,每个处理间隔都是一个新的工作,因此任务只能持续处理每个间隔数据所需的时间。希望时间小于间隔时间或您的处理将备份,最终耗尽内存来存储所有等待处理的RDD。
另请注意,您需要拥有一个专用于每个流的核心Reader
。每个都将固定为流的生命!如果需要重新启动流摄取,您需要额外的核心; Spark将尝试使用不同的核心。此外,如果您的驱动程序还在群集上运行(而不是在您的笔记本电脑上或其他东西上),那么您将拥有一个核心。
尽管如此,Mesos是一个不错的选择,因为它会将任务分配给有能力运行它们的节点。除非数据流本身很小,否则您的群集对于您尝试执行的操作来说听起来很小。
如果您使用Spark的Datastax连接器,它将尝试将输入分区保留在Spark任务的本地。但是,我相信连接器假设它将使用独立模式管理Spark本身。因此,在采用Mesos之前,请检查是否真的需要它。