【问题标题】:Spark emr repartition-compute-coalesceSpark emr 重新分区-计算-合并
【发布时间】: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


    【解决方案1】:
    1. 分享作业的 DAG 可视化?您应该在 stderr 中看到一些异常(丢失的执行程序)等。
    2. Coalesc 应该在重新分区时尽量减少数据移动。它忽略了重新分区,因为 coalesc 正在通过最小化洗牌进行重新分区。

    【讨论】:

    • 我使用的是 spark 1.3,不确定它是否具有数据可视化功能。可视化不是作为 spark 1.4 的一部分添加的吗?
    • 另外,我确实在作业运行期间看到了丢失的执行程序异常。它说:远程 Akka 客户端已取消关联...与远程系统 tcp 的关联...失败,地址现在被门控 [5000] 毫秒。原因:[解除关联]
    • @user2103008 是 1.3 的一部分 spark.apache.org/docs/1.3.0/monitoring.html
    • @user2103008 所以这会强制重新启动任务,我不知道如何调试这些。
    • 我想知道这是否是执行程序的 OOM 错误...持久化的 RDD 以 > 1 TB 结束
    猜你喜欢
    • 2015-10-15
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    • 2015-01-01
    • 2018-07-24
    • 2019-03-02
    • 2020-03-07
    • 2022-08-03
    相关资源
    最近更新 更多