如何处理 Spark 写入 orc 文件中的失败场景

How to handle failure scenario in Spark write to orc file

我有一个用例,我将数据从 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)

我不想对完整的 RDD 进行检查点操作,因为这将是非常昂贵的操作。还, 我不想创建多个 orc 文件。要求是只维护单个文件。

我应该尝试任何其他解决方案或方法吗?

您好,最好的方法之一是在 HDFS 下每天将数据写入一个文件夹。

因此,如果您的 ORC 写入作业失败,您将能够清理该文件夹。

清洁应该发生在您作业的 bash 端。如果 return code != 0 则删除 ORC 文件夹。然后重试。

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