所以我试图预先计算我的数据,以便从检查点拉出RDD。但是,我发现在运行两次相同的工作时,系统只是从头开始重新创建RDD。
以下是我为创建检查点而实施的代码:
def checkpointTeam(checkpointDir:String) ={
sparkContext.setCheckpointDir(checkpointDir)
val a = ObjectsTable.readAsRDD(sparkContext, Some("5507424...")).persist() //read from HBase
a.checkpoint()
a.count()
}
编辑:这是创建我的sparkContext的代码
val sparkContext = {
val sparkConf = new SparkConf()
.setAppName(appName.getOrElse(jobName))
.set("spark.driver.allowMultipleContexts", "true")
sparkConf.setMaster(EnvConfig.sparkMaster)
Option(System.getenv("SPARK_HOME")).foreach(sparkConf.setSparkHome)
sparkConf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
sparkConf.set("spark.scheduler.mode", "FAIR")
sparkConf.set("spark.yarn.am.memory", "14g")
sparkConf.set("spark.yarn.am.cores", "4")
sparkConf.set("spark.driver.extraJavaOptions","-XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode")
sparkConf.set("spark.executor.extraJavaOptions","-XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode")
sparkConf.set("spark.storage.memoryFraction", "0.4")
sparkConf.set("spark.yarn.executor.memoryOverhead", "4000")
sparkConf.set("spark.locality.wait.process","120000")
new SparkContext(sparkConf)
}
sparkContext.addSparkListener(new StatsReportListener())
log.info("Initialized SparkContext")
sparkContext
}
答案 0 :(得分:-1)
如果使用流式上下文,只需使用StreamingContext.getOrCreate,请参阅文档:http://spark.apache.org/docs/latest/streaming-programming-guide.html#how-to-configure-checkpointing
如果它不是流媒体 - 您可以控制何时将您的rdd保存在批处理作业中以及何处,以便您可以从同一个地方完全加载它(通常是批量生产中的#&#) 39;除非你拥有巨大的血统,否则需要检查点,但它不是为了保存数据,而是为了截断DAG)