【发布时间】:2016-11-29 13:40:02
【问题描述】:
10 个节点集群有 20 个执行器和代码读取一个包含 100 个文件的文件夹的分区数是多少?
【问题讨论】:
标签: scala hadoop apache-spark cluster-computing rdd
10 个节点集群有 20 个执行器和代码读取一个包含 100 个文件的文件夹的分区数是多少?
【问题讨论】:
标签: scala hadoop apache-spark cluster-computing rdd
它在您运行的不同模式下是不同的,您可以使用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()
【讨论】:
来自 Spark 文档:
默认情况下,Spark 为文件的每个块创建一个分区 (HDFS 中的块默认为 64MB),但您也可以要求 通过传递更大的值来增加分区数。请注意,您 分区数不能少于块数。
分区数也取决于文件的大小。如果文件太大,您可以选择更多的分区。
【讨论】:
scala/java 对象 RDD 的分区数量将取决于机器的核心,如果您使用 Hadoop 输入文件创建 RDD,那么它将取决于 hdfs 的块大小(取决于版本),您可以找到RDD中的分区数如下
rdd.getNumPartitions
【讨论】: