Apache spark 如何处理Spark写入orc文件中的故障场景

Apache spark 如何处理Spark写入orc文件中的故障场景,apache-spark,apache-spark-sql,orc,spark-checkpoint,Apache Spark,Apache Spark Sql,Orc,Spark Checkpoint,我有一个用例,我将数据从Mongodb推送到orc文件中的HDFS,该文件每隔1天运行一次,并将数据附加到HDFS中现有的orc文件中 现在我关心的是,在写入orc文件时,作业是否以某种方式失败或停止。考虑到一些数据已经写入orc文件,我应该如何处理这种情况。我想避免在orc文件中重复 用于写入orc文件格式的代码段- val df = sparkSession .read .mongo(ReadConfig(Map("database" ->

我有一个用例,我将数据从Mongodb推送到orc文件中的HDFS,该文件每隔1天运行一次,并将数据附加到HDFS中现有的orc文件中

现在我关心的是,在写入orc文件时,作业是否以某种方式失败或停止。考虑到一些数据已经写入orc文件,我应该如何处理这种情况。我想避免在orc文件中重复

用于写入orc文件格式的代码段-

  val df = sparkSession
          .read
          .mongo(ReadConfig(Map("database" -> "dbname", "collection" -> "tableName")))
          .filter($"insertdatetime" >= fromDateTime && $"insertdatetime" <= toDateTime)

        df.write
          .mode(SaveMode.Append)
          .format("orc")
          .save(/path_to_orc_file_on_hdfs)
val df=sparkSession
阅读
.mongo(ReadConfig(映射(“数据库”->“数据库名”,“集合”->“表名”))

.filter($“insertdatetime”>=fromDateTime&$“insertdatetime”Hi最好的方法之一是每天将数据写入HDFS下的一个文件夹

所以,如果您的ORC写入作业失败,您将能够清理文件夹

清理应该发生在作业的bash端。如果返回代码!=0,则删除ORC文件夹。然后重试


编辑:通过写入日期进行分区对你以后使用spark阅读ORC会更有帮助

你的意思是说我应该每天写入单独的ORC文件?但正如我所提到的,我不想维护多个文件。我想要一个ORC文件,这样我就可以每天附加数据。那么,有什么方法可以实现吗l这种方法还是我应该每天只使用单独的文件?是的。不可能附加到ORC文件中。但是使用通配符阅读将很容易避免阅读侧的所有日期。这是最好和更有效的方法