gpt4 book ai didi

scala - 如何将数据分发到工作节点

转载 作者:行者123 更新时间:2023-12-04 13:49:03 26 4
gpt4 key购买 nike

我有一个关于 Apache Spark 以及如何将数据从驱动程序分发到执行程序的一般性问题。我将带有“scala.io.Source”的文件加载到集合中。然后,我使用“SparkContext.parallelize”将集合并行化。问题从这里开始——当我没有指定分区数时,工作人员的数量被用作分区值,任务被发送到节点,我收到建议任务大小为 100kB 的警告,我的任务大小为例如15MB(60MB 文件/4 个节点)。然后计算以节点上的“OutOfMemory”异常结束。当我并行化到更多分区时(例如 600 个分区 - 以获得每个任务 100kB)。计算在工作人员上成功执行,但在驱动程序中一段时间​​后引发“OutOfMemory”异常。在这种情况下,我可以打开 spark UI 并观察驱动程序的内存在计算过程中是如何缓慢消耗的。看起来驱动程序将所有内容都保存在内存中,并且不会将中间结果存储在磁盘上。

我的问题是:

  • RDD分成多少个分区?
  • 如何“以正确的方式”分发数据?
  • 如何防止内存异常?
  • 有没有办法让司机/ worker 换车?它是配置选项还是必须在程序代码中“手动”完成?

谢谢

最佳答案

  • 如何“以正确的方式”分发数据?

    您将需要一个分布式文件系统(例如 HDFS)来托管您的文件。这样,每个工作人员都可以并行读取文件的一部分。这将提供比序列化和数据更好的性能。

  • 如何防止内存异常?

    不看代码很难说。大多数操作都会溢出到磁盘。如果非要我猜的话,我会说你正在使用 groupByKey ?

  • RDD分成多少个分区?

    我认为经验法则(最佳并行性)是您的工作可用内核数量的 2-4 倍。正如您所做的那样,您可以牺牲内存使用时间。

  • 有没有办法告诉司机/工作人员交换?它是配置选项还是必须在程序代码中“手动”完成?

    Shuffle 溢出行为由属性 spark.shuffle.spill 控制。默认情况下是真的(=溢出到磁盘)。

关于scala - 如何将数据分发到工作节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27546157/

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