spark设置checkpoint路径
spark.sparkContext().setCheckpointDir("hdfs://nameservice1/xx/xx");
最终会把rdd的数据文件放在hdfs,
长此以往,这些无效数据,肯定会占满磁盘
所以有对应的清理checkpint配置
spark.cleaner.referenceTracking.cleanCheckpoints = 默认false
但是spark.cleaner.referenceTracking.cleanCheckpoints,也不能意味着一定能回收,因为垃圾回收并非一定会在合适的时间执行,有可能最终也没有触发弱引用清理任务逻辑
解决方法
所以最后还是在任务结束后再删除最好
def remove(filePath:String): Unit ={
val path=new Path(filePath)
val hdfs=FileSystem.get(Env.SPARK.sparkContext.hadoopConfiguration)
if(hdfs.exists(path)){
hdfs.delete(path,true)
}
}
def main(args: Array[String]): Unit = {
try {
} catch {
case e: Throwable =>
throw e
} finally {
HdfsService.remove(Env.SPARK.sparkContext.getCheckpointDir.get)
logger.info("执行耗时: {} ms", end - start)
}
}