Multithreading Spark:理解分区-核心

Multithreading Spark:理解分区-核心,multithreading,scala,apache-spark,cpu-cores,Multithreading,Scala,Apache Spark,Cpu Cores,我想了解Spark中的分区。 我正在windows 10上以本地模式运行spark。 我的笔记本电脑有2个物理核心和4个逻辑核心 1/术语:对我来说,火花中的核心=线。所以火花中的核心不同于物理核心,对吗?火花核心与任务相关,对吗? 如果是这样的话,因为您需要一个用于分区的线程,如果我的sparksql数据框架有4个分区,那么它需要4个线程,对吗 2/如果我有4个逻辑核,这是否意味着我只能在笔记本电脑上同时运行4个并发线程?那么火花中的4 3/设置分区数:如何选择我的数据帧的分区数,以便进一步的

我想了解Spark中的分区。 我正在windows 10上以本地模式运行spark。 我的笔记本电脑有2个物理核心和4个逻辑核心

1/术语:对我来说,火花中的核心=线。所以火花中的核心不同于物理核心,对吗?火花核心与任务相关,对吗? 如果是这样的话,因为您需要一个用于分区的线程,如果我的sparksql数据框架有4个分区,那么它需要4个线程,对吗

2/如果我有4个逻辑核,这是否意味着我只能在笔记本电脑上同时运行4个并发线程?那么火花中的4

3/设置分区数:如何选择我的数据帧的分区数,以便进一步的转换和操作尽可能快地运行? -既然我的笔记本电脑有4个逻辑核心,它应该有4个分区吗? -分区的数量与物理核心还是逻辑核心有关? -在spark文档中,有人写道,每个CPU需要2-3个任务。既然我有两个物理核心,分区的nb应该等于4还是6

(我知道分区的数量对本地模式没有多大影响,但这只是为了理解)

  • 没有“火花核”这样的东西。如果您指的是像
    --executor cores
    这样的选项,那么是的,它指的是每个executor将并发运行的任务数量

  • 您可以将并发任务的数量设置为您想要的任何数量,但是超过您拥有的逻辑核心的数量可能不会带来任何好处

  • 要使用的分区数取决于具体情况。如果不知道您正在进行的数据或转换,很难给出一个数字。典型的建议是使用略低于总内核数的倍数。例如,如果您有16个内核,可能47、79、127以及略低于16倍数的类似数字都是好的。这样做的原因是您希望确保所有内核都正常工作(尽可能少的时间让资源空闲,等待其他内核完成)。但是您需要留出一点额外的时间来允许推测性执行(如果同一任务运行缓慢,spark可能会决定运行两次,以查看第二次尝试是否会更快)

  • 不过,选择数字需要反复尝试,利用spark job server来监控任务的运行情况。拥有几个任务,每个任务都有很多记录,这意味着您可能应该增加分区的数量,另一方面,许多分区只有几个记录,每个分区也不好,在这种情况下,您应该尝试减少分区。

    nit:我确实使用“spark core”来指代带有RDD的spark的主/核心模块。这就是我的火花核心。