【问题标题】:In spark, what does the parameter "minPartitions" works in SparkContext.textFile(path, minPartitions)?在 spark 中,参数“minPartitions”在 SparkContext.textFile(path, minPartitions) 中的作用是什么?
【发布时间】:2014-07-21 17:24:35
【问题描述】:

在 Spark 中,无论是 SparkContext 还是 JavaSparkContext, 当您调用 sc.textFile 时,有一个参数是 minPartitions。这个参数是什么意思?

【问题讨论】:

    标签: apache-spark


    【解决方案1】:

    minPartitions 将传递给 Hadoop 的 InputFormat.getSplits。该参数是一个提示,因此您可能会获得更多或更少的分区,具体取决于 Hadoop InputFormat 实现。

    【讨论】:

    • 感谢您的回复。所以基于 InputFormat.getSplits,它说 - “逻辑拆分作业的输入文件集。然后将每个 InputSplit 分配给单独的 Mapper 进行处理。注意:拆分是输入和输入文件的逻辑拆分没有物理拆分成块。例如,拆分可以是 元组。”因此对于 HDFS,当将文件插入 HDFS 时,数据被拆分为多个数据主干,每个主干将包含 64 MB 大小的数据。那么映射器将如何工作?
    • 比如我有一个数据文件是260MB,所以会有64MB、64MB、64MB、64MB和4MB。那么假设当我将 minPartitions 设置为 3 时,会有 3 个线程来读取文件?如果是这种情况,那么他们如何为 3 个线程分配一个节点和多节点的作业?
    • 你是对的。我认为对于 260 MB HDFS 文件,无论minPartitions 是什么,您都会得到 5 个拆分。 Spark 为每个拆分创建一个分区。 (RDD 由分区组成。)然后当你在这个 RDD 上运行作业时,将为每个分区创建一个任务。每个工作节点运行一个执行器。如果一个 executor 有 N 个核,它会一次选择 N 个任务并并行处理它们。当一个任务完成后,如果还有剩余的,executor 会接更多的任务。
    • 欣赏Executor信息,很有帮助!所以回到minPartitions。因此 Spark 将比较给定文件的 minPartitions 和 num_data_trunk(数据中继的数量),如果 minPartitons >=num_data_trunk,则 number_of_splits = minPartitons,否则 number_of_splits = num_data_trunk。那是对的吗?在实践中,如何选择理想的 minPartitons 数量?这与核心数量有关吗?如果是,那么公式是什么,例如 minPartitons = c*number_of_cpus?
    • 不,Spark 只是将 minPartitions 参数提供给 Hadoop 的 InputFormat.getSplits。如果getSplits 忽略它并返回更小或更大数量的拆分,那么您将拥有更小或更大数量的分区。我实际上不知道 HDFS InputFormat 对这个提示做了什么,抱歉。分区数建议为 CPU 总数的 3-4 倍。
    猜你喜欢
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    • 2015-05-22
    • 2016-03-24
    相关资源
    最近更新 更多