【问题标题】:Spark Parallelism in Standalone Mode独立模式下的 Spark 并行性
【发布时间】:2017-12-28 12:22:00
【问题描述】:

我正在尝试在我的系统中以独立模式运行 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 个内核?如果它没有给我系统的实际并行度,那么如何获得实际的并行度?

谢谢!

【问题讨论】:

    标签: apache-spark pyspark databricks


    【解决方案1】:
    sc.defaultParallelism
    

    返回在 SparkContext 上定义的默认并行度级别。默认情况下,它是应用程序可用的内核数。

    但是要知道jupyter笔记本的预应用是什么设置,可以打印

     sc._conf.getAll()
    

    来自斯卡拉sc.getConf.getAll.foreach(println)

    应该有这个属性

    spark.default.parallelism

    我认为在这种情况下它的预设就是为什么你在你的情况下得到 8 个。

    【讨论】:

    • 感谢您的回答。它非常有用。是的,我可以打印我所有的conf。在打印中,我得到了与 config.default 文件中提到的相同的配置。但我的问题是,如果我提到我的执行者是 2 和核心 3,那么为什么它仍然显示默认 8?它不应该是默认3吗?或者执行器核心和默认核心之间是否存在一些差异?谢谢!
    • 是的。默认情况下,它是应用程序可用的内核数。那是 3。但在你的情况下,spark.default.parallelism 默认设置为 8,这就是你得到 8 的原因。可能是它设置的会话的 jupyter 开始
    • 感谢您的澄清。我已经投了赞成票。也会接受它作为答案:)
    【解决方案2】:

    谢谢大家,如果有人在使用 pyspark(版本 > 2.3.X)的 集群执行 中遇到相同的需求,我必须恢复如下变量: spark.sparkContext.getConf().getAll() 然后我使用 python 只获取 spark.default.parallelism 键的值。 以防万一! 谢谢!

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,我的 mac 有 1 个 CPU,只有 4 个内核,但我什么时候会这样做

      sc.defaultParallelism
      

      我总是得到 8 个。

      所以我一直想知道为什么会这样,最后发现它是 cpu 上启用的超线程,它在 mac 上为您提供了 8 个逻辑 cpu

      $ sysctl hw.physicalcpu hw.logicalcpu
      hw.physicalcpu: 4
      hw.logicalcpu: 8
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-07
        • 2016-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-04
        相关资源
        最近更新 更多