multithreading - Spark 中每个任务的 CPU 数量

标签 multithreading scala apache-spark

我不太理解 spark.task.cpus 参数。在我看来,“任务”对应于执行器中的“线程”或“进程”(如果你愿意的话)。假设我将“spark.task.cpus”设置为 2。

  1. 一个线程如何同时使用两个CPU?难道它不需要锁并导致同步问题吗?

  2. 我正在查看deploy/executor/Executor.scala中的launchTask()函数,我在这里没有看到任何“每个任务的CPU数量”的概念。那么Spark最终是在哪里/如何为独立模式下的任务分配多个CPU的呢?

最佳答案

据我所知,在已知某些特定任务具有自己的内部(自定义)并行性的情况下,spark.task.cpus 控制集群中任务的并行性。

更详细: 我们知道 spark.cores.max 定义了您的应用程序需要多少个线程(也称为核心)。如果您保留 spark.task.cpus = 1 ,那么您将同时运行 #spark.cores.max 数量的并发 Spark 任务。

如果您知道您的任务本身是并行的(也许每个任务都会生成两个线程,与外部工具交互等),那么您只想更改 spark.task.cpus 通过设置spark.task.cpus 相应地,你就成为了一名优秀的“公民”。现在,如果你有spark.cores.max=10并且spark.task.cpus=2 Spark将只创建10/2=5个并发任务。鉴于您的任务内部需要(比如说)2 个线程,执行线程的总数永远不会超过 10 个。这意味着您永远不会超出初始约定(由 spark.cores.max 定义) 。

关于multithreading - Spark 中每个任务的 CPU 数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36671832/

相关文章:

c - 套接字寻址机制卡住了

java - 跨线程同步

Scala:尾递归和 ListBuffer

scala - 抽象 case 类的隐式 val

hadoop - 通过 Spark App 在 HDFS 中的不同仓库目录之间保存 Hive 表

c# - 单元测试多线程代码时出现问题

c++ - 不正确地终止线程?

scala - 写入 Parquet 时出现 NullPointerException

json - Scala Spark - 将 JSON 列拆分为多列

hadoop - Spark 1.6.2 & yarn : diagnostics: Application failed 2 times due to AM Container for exited with exitCode: -1