如何处理 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 更有帮助
我有一个用例,我将数据从 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 更有帮助