Spark Streaming 的动态分配

Posted

技术标签:

【中文标题】Spark Streaming 的动态分配【英文标题】:Dynamic Allocation for Spark Streaming 【发布时间】:2017-05-08 15:41:36 【问题描述】:

我有一个 Spark Streaming 作业在我们的集群上与其他作业(Spark 核心作业)一起运行。我想对这些作业使用动态资源分配,包括 Spark Streaming。根据下面的 JIRA 问题,Spark Streaming(在 1.6.1 版本中)不支持动态分配。但在 2.0.0 中已修复

JIRA link

根据本期的 PDF,它说应该有一个名为的配置字段 spark.streaming.dynamicAllocation.enabled=true 但是我在文档中没有看到这个配置。

谁能确认一下,

    我不能在 1.6.1 版本中为 Spark Streaming 启用动态资源分配。 在 Spark 2.0.0 中是否可用。如果是,应该设置什么配置 (spark.streaming.dynamicAllocation.enabled=truespark.dynamicAllocation.enabled=true

【问题讨论】:

【参考方案1】:

我可以为 Spark Streaming 启用动态资源分配吗? 1.6.1版本?

是的,您可以通过使用spark.dynamicAllocation.enabled=true 为任何 Spark 应用程序设置动态分配来启用 但我对流式应用程序有一些问题(在SPARK-12133 中提到)

    您的执行程序可能永远不会空闲,因为它们每 N 秒运行一次 您应该至少有一个接收器始终运行 现有的启发式方法没有考虑批处理队列的长度

因此,它们在 Spark 2.0 中添加了新属性 (spark.streaming.dynamicAllocation.enabled),仅用于流式应用程序。

它在 Spark 2.0.0 中是否可用。如果是,应该是什么配置 设置 spark.streaming.dynamicAllocation.enabled 或 spark.dynamicAllocation.enabled ?

如果应用程序正在流式传输,则必须为spark.streaming.dynamicAllocation.enabled,否则请使用spark.dynamicAllocation.enabled

编辑:(根据 2017-JAN-05 的评论)

截至今天尚未记录,但我在 Spark 源代码中获得了此属性和实现。 github: ExecutorAllocationManager.scala(单元测试github: ExecutorAllocationManagerSuite.scala)类已包含在 Spark 2.0 中,而此实现在 Spark 1.6 及更低版本中不存在。

【讨论】:

感谢斯里尼瓦斯的回复。但我在 Spark 文档中没有看到“spark.streaming.dynamicAllocation.enabled”。你能把我指向你看到这个的链接吗? 我正在独立运行 spark 集群,我的集群从启动所有执行程序开始,而我想以最少的执行程序启动它如何做到这一点.. 你能帮忙解决这个问题以及我提供的任何参考吗可以参考 还有像“spark.dynamicAllocation.initialExecutors”这样的注释用于流式动态分配

以上是关于Spark Streaming 的动态分配的主要内容,如果未能解决你的问题,请参考以下文章

Spark Streaming资源动态申请和动态控制消费速率剖析

第17课:Spark Streaming资源动态申请和动态控制消费速率原理剖析

(版本定制)第17课:Spark Streaming资源动态申请和动态控制消费速率原理剖析

Spark Streaming资源动态申请和动态控制消费速率原理剖析

Spark Streaming资源动态申请和动态控制消费速率原理剖析

使用Spark Streaming + Kudu + Impala构建一个预测引擎