【问题标题】:How to handle failure scenario in Spark write to orc file如何处理 Spark 写入 orc 文件中的失败场景
【发布时间】:2020-05-20 08:38:25
【问题描述】:

我有一个用例,我在 orc 文件中将数据从 Mongodb 推送到 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 文件。要求仅维护单个文件。

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

【问题讨论】:

    标签: apache-spark apache-spark-sql orc spark-checkpoint


    【解决方案1】:

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

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

    清理工作应该发生在你工作的 bash 方面。如果返回码 != 0 则删除 ORC 文件夹。然后重试。

    编辑:通过写入日期进行分区将在您稍后使用 spark 阅读 ORC 时更加强大

    【讨论】:

    • 你的意思是说我应该每天写一个单独的ORC文件?但正如我所提到的,我不想维护多个文件。我想要一个兽人文件,我应该能够每天附加数据。那么,是否有任何方法可以实现这种方法,或者我应该每天只使用单独的文件?
    • 是的。无法附加到 ORC 文件。但是使用通配符可以轻松阅读,以避免阅读方面的所有日期。这是最好和更有效的方法
    猜你喜欢
    • 1970-01-01
    • 2018-06-09
    • 2018-10-31
    • 2011-05-24
    • 2019-01-17
    • 2018-06-02
    • 1970-01-01
    • 2014-05-07
    • 1970-01-01
    相关资源
    最近更新 更多