【问题标题】:prioritizing partitions / task execution in spark在火花中优先分区/任务执行
【发布时间】:2019-12-20 18:11:06
【问题描述】:

我的 Spark 作业包含有偏差的数据。数据需要基于列进行分区。我想告诉 spark 先开始处理最大的分区,以便更有效地使用可用资源。

推理如下:我总共有 10000 个分区,其中 9999 个分区只需要 1 分钟处理,1 个分区需要 10 分钟处理。如果我先得到沉重的分区,我可以在 11 分钟内完成这项工作,如果最后得到它则需要 18 分钟。

有没有办法确定分区的优先级?这对你有意义吗?

我在电子表格上勾勒出这两个场景

【问题讨论】:

    标签: apache-spark pyspark distribution partitioning


    【解决方案1】:

    您的推理是正确的 afa:如果立即开始大任务,那么您的整体工作将更早完成。但是,您也不能控制任务的顺序(/优先级),因为 spark 任务调度程序不提供定义该顺序的接口。

    【讨论】:

      【解决方案2】:

      长时间运行的任务通常是数据倾斜的结果。正确的解决方案在这里 就是对数据进行重新分区,以确保任务之间的均匀分布。

      1.Evenly distribute your data using repartition as said by @Chandan
      2.There might be encounter network issues while dealing with skewed data 
      where an executor’s heartbeat times out.In such cases, consider increasing
      your **spark.network.timeout** and **spark.executor.heartbeatInterval**.
      

      重要的建议是寻找数据局部性级别。据我所知,位置级别表明已执行了哪种类型的数据访问。当一个节点完成所有工作并且其 CPU 空闲时,Spark 可能会决定启动其他需要从其他地方获取数据的待处理任务。因此,理想情况下,您的所有任务都应该在本地处理,因为它与较低的数据访问延迟相关联。

      您可以使用以下方法配置移动到其他位置级别之前的等待时间:

      spark.locality.wait
      

      1.Spark 官方文档data locality

      2.数据局部性说明refer

      【讨论】:

        【解决方案3】:

        如果您的数据存在偏差,即您的大部分数据存在于单个分区中,并且您的数据没有在所有分区中平均分配。在这种情况下,您无法充分利用 spark 并行化。

        我总共有 10000 个分区,其中 9999 个分区只需要 1 分钟来处理,1 个分区需要 10 分钟来处理。如果我先得到沉重的分区,我可以在 11 分钟内完成这项工作,如果最后得到它则需要 18 分钟。

        它不是那样工作的。每个分区将仅由一个任务或线程占用执行。因此,在您的情况下,所有其他任务都已完成,并且由于数据偏斜,只有任务需要时间才能完成。

        处理和加速过程的方法。

        1. 均匀分布您的数据

          例如,如果您没有任何分区键,则将一个新列作为 sequence number%numberOfpartitionsyouwant 添加到您的数据框中。例如,如果你想要 10 个分区,那么

        numberOfpartitionsyouwant = 10

        所以每个数据都将在数字 0 到 9 之间进行分区。然后使用这个新列对新数据框进行分区。

        【讨论】:

        • 问题是我需要单个执行程序上分区列的所有具有给定值的数据。所以我可以进行更多分区,但数据会保持倾斜。我只想先分配与更大分区相关的任务。
        • 先分配对你有什么帮助。在 Spark 中,每个任务将只分配给一个分区。如果你使用一个 4 核的执行器,那么 4 个线程将占用 4 个分区。一个分区不会分配给多个线程或任务
        • 好吧,有 4 个执行者,这并不重要,但有 1000 个......
        猜你喜欢
        • 1970-01-01
        • 2014-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多