java.lang.OutOfMemoryError:java堆空间和org.apache.spark.shuffle.MetadataFetchFailedException:缺少shuffle 4的输出位置

java.lang.OutOfMemoryError:java堆空间和org.apache.spark.shuffle.MetadataFetchFailedException:缺少shuffle 4的输出位置,java,apache-spark,rdd,java-pair-rdd,Java,Apache Spark,Rdd,Java Pair Rdd,我尝试执行代码,但发现以下错误: java.lang.OutOfMemoryError:java堆空间 org.apache.spark.shuffle.MetadataFetchFailedException:缺少shuffle 4的输出位置 代码可以在小文件(一些kb)上执行,但是在“大”文件(5mb)上我得到了错误。我试图增加VM内存和spark.driver.memory,但又出现了相同的错误 parkConf sparkConf = new SparkConf().setAppName

我尝试执行代码,但发现以下错误: java.lang.OutOfMemoryError:java堆空间 org.apache.spark.shuffle.MetadataFetchFailedException:缺少shuffle 4的输出位置

代码可以在小文件(一些kb)上执行,但是在“大”文件(5mb)上我得到了错误。我试图增加VM内存和spark.driver.memory,但又出现了相同的错误

parkConf sparkConf = new SparkConf().setAppName("aName");
        JavaSparkContext sc = new JavaSparkContext(sparkConf);
        
        JavaRDD<String> lines = sc.textFile(args[0]);
        
        JavaPairRDD<String, String> edges = lines.flatMapToPair(t -> {
            List<Tuple2<String,String>> result = new ArrayList<>();
            if(!t.contains("#")) {
                String [] nodes = SPACE.split(t);
                if(Long.parseLong(nodes[0])<Long.parseLong(nodes[1])) {
                    result.add(new Tuple2<>(nodes[0], nodes[1]));
                } else {
                    result.add(new Tuple2<>(nodes[1], nodes[0]));
                }
            }
            return result.iterator();
        });
        
        JavaPairRDD<String, String> edgesReverse = edges.mapToPair(t -> {
            return new Tuple2<>(t._2(), t._1());
        });
        JavaPairRDD<String, Tuple2<String, String>> rdd1 = edges.join(edgesReverse);
        JavaPairRDD<String, Tuple2<String, String>> rdd2 = edges.join(edges);
        JavaPairRDD<String, Tuple2<String, String>> allRDD = rdd1.union(rdd2).distinct();
        
        JavaPairRDD<Tuple2<String, String>,Double> commonNeighbors = allRDD.mapToPair(t -> {
            if(Long.parseLong(t._2()._1())<Long.parseLong(t._2()._2())) {
                return new Tuple2<>(t._2()._1(),t._2()._2());
            } else {
                return new Tuple2<>(t._2()._2(),t._2()._1());
            }
        }).subtract(edges).mapToPair(t->{
            return new Tuple2<>(t,Double.parseDouble("1"));
        }).reduceByKey((a,b)->a+b).mapToPair(t -> {           
            return new Tuple2<>(t._2(),t._1());
        }).sortByKey(false).mapToPair(t -> {
            return new Tuple2<>(t._2(),t._1());
        });
        
        commonNeighbors.saveAsTextFile(args[1]);
parkConf sparkConf=new sparkConf().setAppName(“aName”);
JavaSparkContext sc=新的JavaSparkContext(sparkConf);
javarddlines=sc.textFile(args[0]);
javapairrdedges=lines.flatMapToPair(t->{
列表结果=新建ArrayList();
如果(!t.contains(“#”){
String[]nodes=SPACE.split(t);
if(Long.parseLong(节点[0]){
返回新的Tuple2(t._2(),t._1());
});
javapairdd rdd1=edges.join(edgesReverse);
javapairdd rdd2=edges.join(边);
javapairdd allRDD=rdd1.union(rdd2.distinct();
javapairdd commonneights=allRDD.mapToPair(t->{
if(Long.parseLong(t._2()._1()){
返回新的Tuple2(t,Double.parseDouble(“1”));
}).reduceByKey((a,b)->a+b).mapToPair(t->{
返回新的Tuple2(t._2(),t._1());
}).sortByKey(false).mapToPair(t->{
返回新的Tuple2(t._2(),t._1());
});
saveAsTextFile(args[1]);

我建议重新分区并增加分区大小。

我建议重新分区并增加分区大小。

处理OOM的一个好方法是使用Eclipse MAT之类的工具进行堆转储并对其进行分析,以找出哪个对象不是GC’处理OOM的一个好方法是使用Ecl之类的工具进行堆转储并对其进行分析ipse MAT以找出哪个对象未被GC'ed