如何在 Spark 上执行多个脚本?

How to execute multiple scripts on Spark?

我有多个 Python 不使用大量内存的脚本。 并且此脚本在 PySpark 上执行。

Spark Master(Standalone) 有4cpu(core), 16G内存,所以Spark一次只能运行4个脚本。 (1 个脚本:1 个核心)

但是,我想 Spark 一次是 运行 20~30 个脚本 我该怎么办?

这是我的 spark master web ui 图片。 请帮帮我。

enter image description here enter image description here

鉴于您只有 4 个核心,您不太可能同时完成那么多任务,您也不希望这样做。您的 Spark 实例的并行性可能会受到以下任何因素的限制:

  1. 硬件(即您的机器有多少个物理内核)
  2. 您的 Spark 并行度和核心使用的配置是什么,即 Spark Config 设置,例如 spark.default.parallelismspark.executor.cores
  3. 您的 Spark 调度程序的配置是什么 (FIFO/Fair) - 如果将其设置为 FIFO,您的实例将尝试一次解决一个“脚本”(但仍会按照第5)
  4. 你如何提交你的“脚本”——如果你从一个进程一个线程提交它们并且总是收集回 Python,那么它们将 运行 串联起来,作为它们的集合返回 Python(驱动程序)可能阻塞
  5. 您的数据分区(spark.sql.shuffle.partitions 和实际数据分区)- 经验法则是一个工作人员(此处 CPU 核心)一次将在 1 个分区上工作,因此如果您的脚本处理一个包含 4 个分区的数据帧,它可能会占用您机器上所有可用的内核。
  6. 其中的实际脚本和操作。

根据上述要求,尝试将默认并行度设置为您所需的核心数,将 Spark 调度程序设置为 FAIR,并考虑将您的“脚本”包装在您提交给 ThreadPoolExecutor 或类似实现的函数中(如果从 PySpark) 提交到 Spark。这样,Spark 将尝试同时安排尽可能多的作业。但是,这并不意味着将同时处理 20-30 个“脚本”(因为这很可能无法实现),它仅意味着将并行提交作业并在 Fair时尚