gpt4 book ai didi

apache-spark - 我什么时候应该重新分区 RDD?

转载 作者:行者123 更新时间:2023-12-03 09:28:54 24 4
gpt4 key购买 nike

我知道我可以repartition一个RDD来增加它的分区并使用coalesce来减少它的分区。在阅读不同的资源后,我对此有两个问题无法完全理解。

Spark 将在生成 RDD 时使用合理的默认值(每个块 1 个分区,在第一个版本中为 64MB,现在为 128MB)。但我也读到建议使用运行作业的内核数量的 2 或 3 倍。那么问题来了:

  • 给定文件应该使用多少个分区?例如,假设我有一个 10GB 的 .parquet 文件,3 个 executor,每个都有 2 个内核和 3gb 内存。
    我应该重新分区吗?我应该使用多少个分区?做出这种选择的更好方法是什么?
  • 如果未提供分区,是否所有数据类型(即 .txt.parquet 等)都默认重新分区?
  • 最佳答案

    Spark 可以为 RDD 的每个分区运行单个并发任务,最多可达集群中的内核总数。

    例如 :

    val rdd= sc.textFile ("file.txt", 5)

    上面这行代码将创建一个名为 textFile 的 RDD,有 5 个分区。

    假设您有一个具有 4 个核心的集群,并假设每个分区需要处理 5 分钟。对于上面有 5 个分区的 RDD,4 个分区进程将并行运行,因为有 4 个内核,当 4 个内核中的一个空闲时,第 5 个分区进程将在 5 分钟后处理。

    整个处理将在 10 分钟内完成,在第 5 个分区过程中,资源(剩余 3 个内核)将保持空闲状态。

    The best way to decide on the number of partitions in a RDD is to make the number of partitions equal to the number of cores in the cluster so that all the partitions will process in parallel and the resources will be utilized in an optimal way.



    Question : Are all data types (ie .txt, .parquet, etc..) repartitioned by default if no partitioning is provided?



    每个 rdd 都会有默认的分区数。
    检查您可以使用 rdd.partitions.length在 rdd 创建之后。

    为了以最佳方式使用现有集群资源并加快速度,我们必须考虑重新分区以确保所有核心都被利用,并且所有分区都有足够数量的均匀分布的记录。

    为了更好地理解,还可以查看 https://jaceklaskowski.gitbooks.io/mastering-apache-spark/spark-rdd-partitions.html

    注意:这没有固定的公式。他们中的大多数人遵循的一般约定是

    (numOf executors * no of cores) * replicationfactor (which may be 2 or 3 times more )

    关于apache-spark - 我什么时候应该重新分区 RDD?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45748190/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com