当您需要进行非常大的洗牌时,火花会中断

问题描述

我正在处理 1 TB 的数据,现在我需要加入两个较小的数据帧,我不知道大小,但它有 200 GB 以上,我收到以下错误

中断发生在 2 小时后的操作中间。

在我看来是记忆棒,但这没有意义,因为看UI Spark Ganglia,RAM内存没有达到如下图所示的限制。

有谁知道我如何在不减少分析的数据量的情况下解决这个问题。

我的集群有: 1 x 主节点 n1-highmem-32 4 x 从节点 n1-highmem-32

 [org.apache.spark.SparkException: Job aborted due to stage failure: Task 3 in stage 482.1 Failed 4 times,most recent failure: Lost task 3.3 in stage 482.1 (TID 119785,10.0.101.141,executor 1): java.io.FileNotFoundException: /tmp/spark-83927f3e-4511-1b/3d/shuffle_248_72_0.data.f3838fbc-3d38-4889-b1e9-298f743800d0 (No such file or directory)
    at java.io.FileOutputStream.open0(Native Method)

        Caused by: java.io.FileNotFoundException: /tmp/spark-83927f3e-4511-1b/3d/shuffle_248_72_0.data.f3838fbc-3d38-4889-b1e9-298f743800d0 (No such file or directory)
      at java.io.FileOutputStream.open0(Native Method)
      at java.io.FileOutputStream.open(FileOutputStream.java:270)][1]

解决方法

这种类型的错误通常发生在某些任务存在更深层次的问题时,例如显着的数据倾斜。由于您没有提供足够的详细信息(请务必阅读 How To Ask 和 How to create a Minimal,Complete,and Verifiable example)和作业统计信息,我能想到的唯一方法是显着增加 shuffle 分区的数量:

''' sqlContext.setConf("spark.sql.shuffle.partitions",2048)

´´´