【问题标题】:What processors should be combined to process large JSON files in NiFi?应该结合哪些处理器来处理 NiFi 中的大型 JSON 文件?
【发布时间】:2018-10-18 12:28:18
【问题描述】:

我想建立一个 NiFi 工作流,它可以提取从 FTP 服务器压缩的大型 JSON 文档(500 MB 到 3 GB),将 JSON 对象拆分为单独的流文件,最后转换每个 JSON 对象到 SQL 并将其插入 MySQL 数据库。

我在 Oracle Java 8 上运行 NiFi 1.6.0,Java 设置了 1024 MB 堆空间。

我目前的流程是:

GetFTP -> CompressContent -> SplitJson -> EvaluateJsonPath -> AttributesToJson -> ConvertJSONToSQL -> PutSQL

此流程非常适合较小的 JSON 文档。一旦大于 400 MB 的文件进入 SplitJson 处理器,它就会抛出 Java OutOfMemory 错误。我可以对现有流程进行哪些更改以使其能够处理大型 JSON 文档?

【问题讨论】:

    标签: apache-nifi


    【解决方案1】:

    通常,您会希望避免将每个文档拆分为流文件。如果您可以将多个文档放在一个流文件中,您将获得更好的性能。你会想看看 NiFi 的记录处理能力,特别是你会想看看 PutDatabaseRecord。

    这里是记录处理方法的一个很好的介绍: https://www.slideshare.net/BryanBende/apache-nifi-record-processing

    如果您绝对必须对每个流文件执行拆分为单个记录,那么您至少应该执行两阶段拆分,其中第一个拆分处理器拆分为每个流文件可能 10k-20k,然后是第二个拆分处理器每个流文件拆分为 1 个。

    【讨论】:

    • 感谢您为我指明幻灯片共享的方向。将我的流程更改为 GetFTP -> CompressContent -> PutDatabaseRecord 很有意义。配置 JSONPathReader 服务需要一些试验和错误,但更可重用。
    • 您好,感谢您提供这些信息。你能告诉我更多关于“两相分离”的信息吗?我必须在大型 Json 文件上使用它,但我不明白如何像你建议的那样拆分它。
    猜你喜欢
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    相关资源
    最近更新 更多