Java spark作业中跳过了rdd.checkpoint

Java spark作业中跳过了rdd.checkpoint,java,apache-spark,Java,Apache Spark,嗨,我正在尝试运行一个长的sparkjob,它经常由于堆栈溢出错误而失败。作业读取parquetfile并在foreach循环中创建rdd。在做了一些研究之后,我认为为每个rdd创建一个检查点可以帮助我解决内存问题。(我尝试了不同的内存、开销内存、并行、重新分区,并找到了最有效的作业设置,但有时它仍然会失败,具体取决于集群上的负载。) 现在谈谈我真正的问题。我正在尝试创建检查点,首先读取拼花地板中的数据,创建一个RDD,然后缓存它,运行检查点函数,然后首先调用操作来实现检查点。在我指定的路径中没

嗨,我正在尝试运行一个长的sparkjob,它经常由于堆栈溢出错误而失败。作业读取parquetfile并在foreach循环中创建rdd。在做了一些研究之后,我认为为每个rdd创建一个检查点可以帮助我解决内存问题。(我尝试了不同的内存、开销内存、并行、重新分区,并找到了最有效的作业设置,但有时它仍然会失败,具体取决于集群上的负载。)

现在谈谈我真正的问题。我正在尝试创建检查点,首先读取拼花地板中的数据,创建一个RDD,然后缓存它,运行检查点函数,然后首先调用操作来实现检查点。在我指定的路径中没有创建任何检查点,并且它表示跳过了该阶段。谁能帮我理解这个问题:)

ctx.getSparkContext().setCheckpointDir(“/tmp/checkpoints”);
公共静态void writeHidtocouchbase(DataFrameContext ctx,列表文件路径字符串){
文件路径字符串
.forEach(文件路径->{
JavaPairRDD rdd=
getParquetFromPath(ctx,filePath);
缓存();
检查点();
rdd.first();
rdd.foreachPartition(p->{
crumpsclient=getClient();
p、 外汇储备(UID->{
Crumbs-Crumbs=client.getAsync(uids.\u 1)
.超时(10,时间单位为秒)
.toBlocking()
.first();
字符串hHid=uids.\u 2;
如果(hHid!=null){
grambs.getorCreateSingletonCramb(householdCramb.class).setHouseholdId(hHid);
客户机。putSync(碎屑);
}
});
client.shutdown();
});
});
}
检查点在第一次迭代中创建一次,但不再创建。
KR

我的错误分区实际上是创建的。我上面提到的“第一个”分区是一个包含分区的目录。由于像8f987639-d5c8-46b8-a1e0-37081f9f8e00这样的目录名,我感到困惑。然而,通过查看@ImDarrenG的血统评论,我有了更多的见解。我从缓存和检查点的第一个RDD创建了一个新的重新分区RDD。这使得应用程序更加稳定,不会出现故障

JavaPairRDD<String, String> rdd =
          UidHhidPerDay.getParquetFromPath(ctx, filePath);
      rdd.cache();
      rdd.checkpoint();
      rdd.first();
      JavaPairRDD<String, String> rddToCompute = rdd.repartition(72);
      rddToCompute.foreachPartition...
javapairdd-rdd=
getParquetFromPath(ctx,filePath);
缓存();
检查点();
rdd.first();
javapairdd rddToCompute=rdd.repartition(72);
rddToCompute.foreachPartition。。。

不确定是否相关,但对
rdd.checkpoint()
的调用似乎是多余的,rdd没有要截断的父沿袭。这样对内存使用没有帮助。@ImDarrenG谢谢!您能告诉我如何在代码中完成这项工作吗?您可以删除对checkpoint()的调用,这对您没有任何帮助。好的,但是还有其他方法可以确保工作成功完成吗?您能解释一下rdd并没有父血统可以截断是什么意思吗:)我对spark有点陌生。你能提供更多关于StackOverflower的细节吗?很高兴你发现了这个问题。我想看看它在没有rdd.cache()的情况下是否稳定;检查点();rdd.first();但是如果它没有坏,就不要修理它!谢谢,它不稳定,我总是会得到x个失败任务(分区:),但现在我一个也没有:)
JavaPairRDD<String, String> rdd =
          UidHhidPerDay.getParquetFromPath(ctx, filePath);
      rdd.cache();
      rdd.checkpoint();
      rdd.first();
      JavaPairRDD<String, String> rddToCompute = rdd.repartition(72);
      rddToCompute.foreachPartition...