为什么Spark不使用本地计算机上的所有核心

Joh*_*han 6 parallel-processing mapreduce apache-spark

当我在Spark-Shell中运行一些Apache Spark示例或作为一项工作时,我无法在一台机器上实现完全核心利用率.例如:

var textColumn = sc.textFile("/home/someuser/largefile.txt").cache()
var distinctWordCount = textColumn.flatMap(line => line.split('\0'))
                             .map(word => (word, 1))
                             .reduceByKey(_+_)
                             .count()
Run Code Online (Sandbox Code Playgroud)

运行此脚本时,我通常只在我的8核计算机上看到1个或2个活动核心.Spark不应该和它并行吗?

wik*_*ier 6

您可以local[*]在本地运行Spark,其工作线程的数量与逻辑机拥有的计算机数量相同。

  • 含义将配置参数“spark.master”设置为“local[*]”。 (3认同)

Dav*_*vid 2

当您运行本地 Spark shell 时,您仍然需要指定 Spark 任务将使用的核心数量。如果您想使用 8 核,请确保

export MASTER=local[8]
Run Code Online (Sandbox Code Playgroud)

在运行你的 shell 之前。

此外,正如 @zsxwing 所说,您可能需要确保将数据划分为足够的分区以使所有核心保持繁忙,或者指定您想要看到的并行度。