阅读检查点RDD

时间:2016-03-14 18:18:37

标签: scala apache-spark

所以我试图预先计算我的数据,以便从检查点拉出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
  }

1 个答案:

答案 0 :(得分:-1)

如果使用流式上下文,只需使用StreamingContext.getOrCreate,请参阅文档:http://spark.apache.org/docs/latest/streaming-programming-guide.html#how-to-configure-checkpointing

如果它不是流媒体 - 您可以控制何时将您的rdd保存在批处理作业中以及何处,以便您可以从同一个地方完全加载它(通常是批量生产中的#&#) 39;除非你拥有巨大的血统,否则需要检查点,但它不是为了保存数据,而是为了截断DAG)