【问题标题】:How to determine number of partitons of rdd in spark given the number of cores and executors ?给定核心和执行程序的数量,如何确定 spark 中 rdd 的分区数量?
【发布时间】:2016-11-29 13:40:02
【问题描述】:

10 个节点集群有 20 个执行器和代码读取一个包含 100 个文件的文件夹的分区数是多少?

【问题讨论】:

标签: scala hadoop apache-spark cluster-computing rdd


【解决方案1】:

它在您运行的不同模式下是不同的,您可以使用spark.default.parallelism 设置对其进行调整。来自 Spark 文档:

对于没有父 RDD 的并行化等操作,它取决于 集群管理器:

Local mode: number of cores on the local machine
Mesos fine grained mode: 8
Others: total number of cores on all executor nodes or 2, whichever is larger

相关文档的链接: http://spark.apache.org/docs/latest/configuration.html#execution-behavior

您可以自己更改分区数,具体取决于您正在读取的数据。一些 Spark api 提供了额外的分区数设置。

如@Sandeep Purohit 所说,进一步检查创建了多少个分区

rdd.getNumPartitions

这将导致正在创建的分区数量!

你也可以通过使用两个Api来改变partitons创建后的数量:coalesce and repartition

Coalesce and Repartition 链接:Spark - repartition() vs coalesce()

【讨论】:

    【解决方案2】:

    来自 Spark 文档:

    默认情况下,Spark 为文件的每个块创建一个分区 (HDFS 中的块默认为 64MB),但您也可以要求 通过传递更大的值来增加分区数。请注意,您 分区数不能少于块数。

    分区数也取决于文件的大小。如果文件太大,您可以选择更多的分区。

    【讨论】:

      【解决方案3】:

      scala/java 对象 RDD 的分区数量将取决于机器的核心,如果您使用 Hadoop 输入文件创建 RDD,那么它将取决于 hdfs 的块大小(取决于版本),您可以找到RDD中的分区数如下

      rdd.getNumPartitions

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-22
        • 2014-08-28
        • 1970-01-01
        • 2016-12-24
        • 2018-06-02
        相关资源
        最近更新 更多