【问题标题】:what factors affect how many spark job concurrently哪些因素会影响同时有多少个 Spark 作业
【发布时间】:2016-05-04 14:45:10
【问题描述】:

我们最近设置了spark作业提交的Spark Job Server。但是我们发现我们的20个节点(8核/每个节点128G内存)spark集群只能承受10个spark作业并发运行。

有人可以分享一些详细信息,说明哪些因素实际上会影响可以同时运行多少个 Spark 作业?我们如何调整 conf 以充分利用集群?

【问题讨论】:

  • 我想也许你没有得到问题的答案,因为问题没有说得很清楚。你的意思是只能运行 10 个作业?当您尝试运行 11 个作业时会发生什么?另外,为什么您觉得您目前没有充分利用集群? CPU使用率是否太低? Spark 可以在您的所有机器上并行运行单个作业。因此,如果您的作业没有并行运行,那并不是任何问题的迹象。

标签: apache-spark


【解决方案1】:

问题缺少一些上下文,但首先 - Spark 作业服务器 似乎限制了并发作业的数量(与 Spark 本身不同,它限制了 任务的数量,而不是工作):

来自application.conf

 # Number of jobs that can be run simultaneously per context
 # If not set, defaults to number of cores on machine where jobserver is running
 max-jobs-per-context = 8

如果这不是问题(您将限制设置得更高,或者使用了多个上下文),那么集群中的核心总数 (8*20 = 160) 就是最大并发任务数。如果您的每个作业创建 16 个任务,Spark 会将下一个传入作业排队等待 CPU 可用。

Spark对输入数据的每一个partition创建一个task,partition的数量根据输入在磁盘上的分区决定,或者调用repartitioncoalesce RDD/DataFrame 手动更改分区。对多个 RDD 进行操作的其他一些操作(例如 union)也可能会更改分区数。

【讨论】:

    【解决方案2】:

    可能会限制您所看到的并行性的一些事情:

    • 如果您的作业仅包含 map 操作(或其他无 shuffle 操作),它将受限于您拥有的数据分区数。因此,即使您有 20 个执行程序,如果您有 10 个数据分区,它也只会产生 10 个任务(除非数据是可拆分的,例如 parquet、LZO 索引文本等)。
    • 如果您正在执行 take() 操作(没有随机播放),它会执行指数级的 take,只使用一个任务,然后不断增长,直到它收集到足够的数据来满足 take 操作。 (Another question similar to this)

    您能分享更多关于您的工作流程的信息吗?这将有助于我们诊断它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-27
      • 2017-10-09
      • 2013-03-25
      • 2022-01-14
      相关资源
      最近更新 更多