我有两个spark流作业,我想运行,以及保留一些批处理作业和其他操作可用的资源。
我评估了spark独立集群管理器,但我意识到我必须修复两个作业的资源,这将使批处理作业几乎没有计算能力。
我开始评估mesos,因为它有“细粒度”的执行模型,资源在spark应用程序之间转移。
1) 这是否意味着一个内核可以在两个流应用程序之间切换?
2) 虽然我有spark&cassandra,但是为了利用数据局部性,我是否需要在每台从机上都有专用的内核来避免洗牌?
3) 您是否建议以“细粒度”或“课程粒度”模式运行流作业。我知道合理的答案是过程粒度(为了最小化流应用程序的延迟),但是当整个集群中的资源有限时(集群有3个节点,每个节点有4个核心-有2个流应用程序要运行,并且有多个时间批处理作业)会怎么样
4) 在mesos中,当我在集群模式下运行spark streaming作业时,它会永久地占用一个内核(就像独立的集群管理器所做的那样),还是该内核执行驱动程序进程,有时充当执行器?
谢谢您
1条答案
按热度按时间7eumitmz1#
细粒度模式现在实际上已经被弃用了。即使有了它,每个核心都被分配给任务直到完成,但是在spark流中,每个处理间隔都是一个新作业,因此任务只能持续处理每个间隔的数据所需的时间。希望这个时间少于间隔时间,否则您的处理将备份,最终耗尽内存来存储所有等待处理的rdd。
还要注意的是,您需要有一个核心专用于每个流的
Reader
. 每一个都将被钉在生命的溪流!您将需要额外的核心,以防流摄取需要重新启动;spark将尝试使用不同的核心。另外,如果内核也在集群上运行(而不是在笔记本电脑或其他设备上运行),那么您的驱动程序将绑定一个内核。不过,mesos还是一个不错的选择,因为它将任务分配给有能力运行它们的节点。你的集群听起来很小,除非数据流本身很小。
如果您将datastax连接器用于spark,它将尝试保持spark任务的本地输入分区。不过,我相信connector假设它将使用独立模式管理spark本身。所以,在你采用mesos之前,看看这是否真的是你所需要的。