我想设置一个NiFi工作流,它可以提取大型JSON文档(介于500 MB和3 GB之间),这些文档已经从FTP服务器中解压缩,将JSON对象拆分为单独的流文件,最后将每个JSON对象转换为SQL和将其插入MySQL数据库.
我在Oracle Java 8上运行NiFi 1.6.0,而Java的堆空间设置为1024 MB.
我目前的流程是:
GetFTP - > CompressContent - > SplitJson - > EvaluateJsonPath - > AttributesToJson - > ConvertJSONToSQL - > PutSQL
此流程适用于较小的JSON文档.Java OutOfMemory一旦大于400 MB的文件进入SplitJson处理器,它就会抛出错误.我可以对现有流程进行哪些更改以使其能够处理大型JSON文档?
通常,您希望避免拆分为每个文档的流文件.如果可以将多个文档放在一个流文件中,您将获得更好的性能.您将需要了解NiFi的记录处理功能,特别是您需要查看PutDatabaseRecord.
以下是记录处理方法的一个很好的介绍:https: //www.slideshare.net/BryanBende/apache-nifi-record-processing
如果您必须执行拆分到每个流文件的单个记录,那么您至少应该执行两阶段拆分,其中第一个拆分处理器拆分为每个流文件10k-20k,然后第二个拆分处理器拆分为每个流文件1个.
| 归档时间: |
|
| 查看次数: |
366 次 |
| 最近记录: |