spark.dynamicAllocation.enabled 如何影响作业顺序?

Raj*_*aja 1 apache-spark

需要了解何时使用spark.dynamicAllocation.enabled - 使用它的优点和缺点是什么?我有提交作业的队列。

  1. 9:30 AM --> 作业 A 在启用动态分配的情况下提交。
  2. 上午 10:30 --> 在启用动态分配的情况下提交作业 B。

注意:我的数据很大(处理将在 10GB 数据上进行转换)。

哪个 Job 优先选择将执行程序分配给 Job A 或 Job B,spark 如何协调 b/w 2 应用程序?

Jac*_*ski 5

执行程序的动态分配是关于调整执行程序池的大小。

引用动态分配

spark.dynamicAllocation.enabled是否使用动态资源分配,它会根据工作负载上下调整注册到此应用程序的执行程序的数量。

后来在动态资源分配中

Spark 提供了一种机制,可以根据工作负载动态调整应用程序占用的资源。这意味着您的应用程序可能会将不再使用的资源返还给集群,并在以后有需求时再次请求它们。如果多个应用程序共享 Spark 集群中的资源,则此功能特别有用。

换句话说,作业 A通常会在作业 B 执行之前完成。Spark 作业通常按顺序执行,即一个作业必须在另一个作业开始之前完成。

通常...

SparkContext是线程安全的,可以处理来自 Spark 应用程序的作业。这意味着您可以同时或一个接一个地提交作业,并且在某些配置中期望这两个作业将并行运行。

在应用程序中引用调度

在给定的 Spark 应用程序(SparkContext 实例)中,如果多个并行作业从不同的线程提交,则它们可以同时运行。在本节中,“作业”是指 Spark 操作(例如保存、收集)以及需要运行以评估该操作的任何任务。Spark 的调度程序是完全线程安全的,并支持此用例以启用服务多个请求(例如,对多个用户的查询)的应用程序。

默认情况下,Spark 的调度程序以 FIFO 方式运行作业。每个作业分为“阶段”(例如映射和缩减阶段),第一个作业获得所有可用资源的优先级,而其阶段有任务要启动,然后第二个作业获得优先级,依此类推。

还可以配置作业之间的公平共享。在公平共享下,Spark 以“循环”方式在作业之间分配任务,以便所有作业获得大致相等的集群资源份额。这意味着在长作业运行时提交的短作业可以立即开始接收资源并仍然获得良好的响应时间,而无需等待长作业完成。此模式最适合多用户设置。


包起来...

哪个 Job 优先选择将执行程序分配给 Job A 或 Job B,spark 如何协调 b/w 2 应用程序?

工作 A。

除非您启用了Fair Scheduler Pools

公平调度器还支持将作业分组到池中,并为每个池设置不同的调度选项(例如权重)。例如,这对于为更重要的作业创建“高优先级”池很有用,或者将每个用户的作业组合在一起并为用户提供相等的份额,而不管他们有多少并发作业,而不是为作业提供平等的份额。