【发布时间】:2016-04-22 19:30:01
【问题描述】:
我有一个菜鸟火花问题。这是我要执行的程序:
dataset
.join(anotherDataset)
.repartition(7000)
.flatmap(doComputation)
.persist(StorageLevel.MEMORY_AND_DISK)
.saveToS3()
我正在尝试执行的计算(doComputation)很昂贵,并且由于内存限制,我决定将数据集重新分区为 7000 个分区(即使我有 1200 个执行程序,所以一次只能执行 1200 个)。然而,在完成计算之后,我尝试写入 s3,它大部分工作正常,但很少有任务最终超时并且重试工作。
1) 为什么在我坚持进行昂贵计算后生成的 RDD 时整个作业都会重试?
2)我尝试在持久化之后合并,但随后 spark 忽略了重新分区并仅执行 500 个任务:
dataset
.join(anotherDataset)
.repartition(7000)
.flatmap(doComputation)
.persist(StorageLevel.MEMORY_AND_DISK)
.coalesce(500)
.saveToS3()
有什么方法可以让我执行 repartition(7000)-compute(on those 7000 partitions)-coalesce(500) 然后写入 s3 吗?
【问题讨论】:
标签: scala apache-spark