【问题标题】:Apache Spark standalone mode: number of coresApache Spark 独立模式:核心数
【发布时间】:2015-01-23 22:44:08
【问题描述】:

我正在尝试了解 Spark 内部结构的基础知识,以及用于在本地模式下提交应用程序的 Spark 文档说 spark-submit --master 设置:

local[K] 使用 K 个工作线程在本地运行 Spark(理想情况下,将其设置为 您机器上的内核数)。

local[*] 在本地运行 Spark 与机器上的逻辑核心一样多的工作线程。

由于所有数据都存储在一台本地机器上,它不会从RDDs 上的分布式操作中受益。

当 Spark 利用多个逻辑内核时,它有什么好处以及内部发生了什么?

【问题讨论】:

    标签: multithreading deployment apache-spark


    【解决方案1】:

    系统会分配额外的线程来处理数据。尽管仅限于一台机器,但它仍然可以利用现代服务器中可用的高度并行性。

    如果您有一个合理大小的数据集,比如说有十几个分区,您可以测量使用 local[1] 与 local[n] 所需的时间(其中 n 是您机器中的内核数)。您还可以看到机器利用率的差异。如果您只指定使用一个核心,它将仅使用一个核心的 100%(加上一些额外的垃圾收集)。如果您有 4 个核心,并指定 local[4],它将使用 400% 的核心(4 个核心)。并且可以显着缩短执行时间(尽管通常不会缩短 4 倍)。

    【讨论】:

    • 两个厘米。首先,对于流式传输,您必须为每个输入源分配一个专用线程,再加上至少一个用于主处理的线程,因此如果您正在侦听一个套接字,则至少需要“本地 [2]”。其次,如果开销大于收益,有时单线程会比多线程快。
    • 这很有趣——我在做实验时看到了加速,但不是线性的。假设我使用适合机器内存的单个 RDD 创建作业。 RDD不会被分区是对的吗?那么如何将操作并行到多个内核上呢?
    • 您可以将 RDD 重新分区为任意数量的分区。默认情况下,如果您从 HDFS 加载 RDD,它的分区数将等于它在 HDFS 中使用的块数。如果从本地文件系统加载文件,则可以指定要将其拆分成的分区数。通过实验,您可以将此数字与最有效的数字相匹配;我建议您尝试 1 倍、2 倍或 4 倍您计算机的内核数。
    猜你喜欢
    • 2018-06-02
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 2015-10-10
    • 2016-06-07
    • 2014-08-28
    • 1970-01-01
    相关资源
    最近更新 更多