我正在处理 1 TB 的数据,现在我需要加入两个较小的数据帧,我不知道大小,但它有超过 200 GB,我收到以下错误。
2小时后操作中途出现中断。
在我看来它是一个记忆棒,但这没有意义,因为查看 UI Spark Ganglia,RAM 内存没有达到限制,如下图所示。
有谁知道如何在不减少分析数据量的情况下解决这个问题。
我的集群有: 1 个主节点 n1-highmem-32 4 个从节点 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]
当某些任务存在更深层次的问题(例如严重的数据偏差)时,通常会发生此类错误。由于您没有提供足够的详细信息和作业统计信息,我能想到的唯一方法是显着增加随机分区的数量:
sqlContext.setConf("spark.sql.shuffle.partitions", 2048)