我使用spark2.2并且我像这样启动了spark-shell:
bin/spark-shell --master spark://localhost:7077 --executor-memory 6G
问题1
我启动了 sc.range(0,1024 * 1024 + 10,1).collect ,所有3个内核都被调用了,这对我来说是正常的。
然后我想对60MB的文本文件进行单词计数。什么是bizzard 分区数自动 2 ,只有2个执行器用于计算。
地图阶段:
收集阶段:
问题2
如果您查看地图和收集的位置,您会看到地图的 PROCESS_LOCAL 和另一个的 NODE_LOCAL 。为什么第二个 NODE_LOCAL ?我知道如果它是 NODE_LOCAL ,这意味着数据不在处理它们的jvm进程中,但为什么呢?为什么其中一个执行程序没有从另一个执行程序获取数据并保存部分shuffle?
更新:我尝试使用166MB的文件,这次spark使用所有3个核心来执行任务。所以我想2或3的使用是由spark决定的,如果它认为3个核心对于一个小工作来说太多了,那么它只需要2个。我希望有人可以向我解释这个决定是如何在spark中做出的,代码或理论。