我正试图在我的系统中以独立模式运行spark。我系统的当前规格是8核和32 Gb内存。基于this article我计算火花配置如下:
spark.driver.memory 2g
spark.executor.cores 3
spark.executor.instances 2
spark.executor.memory 20g
maximizeResourceAllocation TRUE
我在这个jupyter笔记本中创建了spark上下文并且正在检查并行度级别,通过这个
sc = SparkContext()
sc.defaultParallelism
默认的并行性给了我8.我的问题是为什么它给我8即使我提到了2个内核?如果它没有给我系统的实际并行性,那么如何获得实际的并行度?
谢谢!
答案 0 :(得分:2)
sc.defaultParallelism
返回SparkContext上定义的默认并行度级别。默认情况下,它是应用程序可用的核心数。
但要了解jupyter笔记本的 预先应用 设置,可以打印
sc._conf.getAll()
来自scala sc.getConf.getAll.foreach(println)
的
那应该有属性
spark.default.parallelism
我认为在这种情况下,它的预设就是为什么你的情况会得到8分。
答案 1 :(得分:0)
谢谢大家,如果有人在使用pyspark(版本> 2.3.X)的集群执行中遇到相同的需求,我必须恢复变量,如下所示:
spark.sparkContext.getConf().getAll()
,然后使用python仅获取spark.default.parallelism键的值。
以防万一!
谢谢!
答案 2 :(得分:0)
我遇到了同样的问题,我的 mac 有 1 个 CPU,只有 4 个内核,但是我什么时候会这样做
sc.defaultParallelism
我总是得到 8 个。
所以我一直想知道为什么会这样,最后发现它是在 cpu 上启用的超线程,它在 mac 上为您提供了 8 个逻辑 cpu
$ sysctl hw.physicalcpu hw.logicalcpu
hw.physicalcpu: 4
hw.logicalcpu: 8