如何在 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 实例的并行性可能会受到以下任何因素的限制:
- 硬件(即您的机器有多少个物理内核)
- 您的 Spark 并行度和核心使用的配置是什么,即 Spark Config 设置,例如
spark.default.parallelism
和 spark.executor.cores
- 您的 Spark 调度程序的配置是什么 (FIFO/Fair) - 如果将其设置为 FIFO,您的实例将尝试一次解决一个“脚本”(但仍会按照第5)
- 你如何提交你的“脚本”——如果你从一个进程一个线程提交它们并且总是收集回 Python,那么它们将 运行 串联起来,作为它们的集合返回 Python(驱动程序)可能阻塞
- 您的数据分区(
spark.sql.shuffle.partitions
和实际数据分区)- 经验法则是一个工作人员(此处 CPU 核心)一次将在 1 个分区上工作,因此如果您的脚本处理一个包含 4 个分区的数据帧,它可能会占用您机器上所有可用的内核。
- 其中的实际脚本和操作。
根据上述要求,尝试将默认并行度设置为您所需的核心数,将 Spark 调度程序设置为 FAIR,并考虑将您的“脚本”包装在您提交给 ThreadPoolExecutor
或类似实现的函数中(如果从 PySpark
) 提交到 Spark。这样,Spark 将尝试同时安排尽可能多的作业。但是,这并不意味着将同时处理 20-30 个“脚本”(因为这很可能无法实现),它仅意味着将并行提交作业并在 Fair
时尚
我有多个 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 实例的并行性可能会受到以下任何因素的限制:
- 硬件(即您的机器有多少个物理内核)
- 您的 Spark 并行度和核心使用的配置是什么,即 Spark Config 设置,例如
spark.default.parallelism
和spark.executor.cores
- 您的 Spark 调度程序的配置是什么 (FIFO/Fair) - 如果将其设置为 FIFO,您的实例将尝试一次解决一个“脚本”(但仍会按照第5)
- 你如何提交你的“脚本”——如果你从一个进程一个线程提交它们并且总是收集回 Python,那么它们将 运行 串联起来,作为它们的集合返回 Python(驱动程序)可能阻塞
- 您的数据分区(
spark.sql.shuffle.partitions
和实际数据分区)- 经验法则是一个工作人员(此处 CPU 核心)一次将在 1 个分区上工作,因此如果您的脚本处理一个包含 4 个分区的数据帧,它可能会占用您机器上所有可用的内核。 - 其中的实际脚本和操作。
根据上述要求,尝试将默认并行度设置为您所需的核心数,将 Spark 调度程序设置为 FAIR,并考虑将您的“脚本”包装在您提交给 ThreadPoolExecutor
或类似实现的函数中(如果从 PySpark
) 提交到 Spark。这样,Spark 将尝试同时安排尽可能多的作业。但是,这并不意味着将同时处理 20-30 个“脚本”(因为这很可能无法实现),它仅意味着将并行提交作业并在 Fair
时尚