Apache nifi 如何避免NiFi中的flowfile故障记录?
我有一个json文件,有将近500.000条记录,其中有些记录解析错误,或者双引号放错了位置。问题是,当我尝试更新记录时,会出现一条警告,告诉我哪些是故障记录,但我无法加载任何其他有效记录 我使用的处理器是: GetFile->UpdateAttribute->ConvertCharacterSet->->->UpdateRecord->PutParquet GetFile->用于获取文件 UpdateAttribute->更新某些属性(不重要) 将characterset->ASCII转换为UTF-8,因为我在记录中有áéíóúñ字符 UpdateRecord->屏蔽一条记录 PutParquet->将文件保存在parquet中 我不知道如何将UpdateRecord中的好记录发送到PutParquet,将坏记录发送到错误日志 可能我需要另一个处理器,但我尝试了validateRecord,但没有工作(可能配置不好) 我的记录中的失败示例:Apache nifi 如何避免NiFi中的flowfile故障记录?,apache-nifi,Apache Nifi,我有一个json文件,有将近500.000条记录,其中有些记录解析错误,或者双引号放错了位置。问题是,当我尝试更新记录时,会出现一条警告,告诉我哪些是故障记录,但我无法加载任何其他有效记录 我使用的处理器是: GetFile->UpdateAttribute->ConvertCharacterSet->->->UpdateRecord->PutParquet GetFile->用于获取文件 UpdateAttribute->更新某些属性(不重要) 将characterset->ASCII转换为U
2020-10-06 01:47:23,471 ERROR org.apache.nifi.processors.standard.UpdateRecord: UpdateRecord[id=36473d38-5d59-1fae-82c1-5f46f50cbfab] Failed to process StandardFlowFileRecord[uuid=0152318c-d126-4c48-8b2e-3f41413724b8,claim=StandardContentClaim [resourceClaim=StandardResourceClaim[id=1601948827512-2676, container=default, section=628], offset=0, length=1587131043],offset=0,name=auditoria_20200929.txt.prq,size=1587131043]; will route to failure: org.apache.nifi.processor.exception.ProcessException: IOException thrown from UpdateRecord[id=36473d38-5d59-1fae-82c1-5f46f50cbfab]: org.codehaus.jackson.JsonParseException: Unexpected character ('B' (code 66)): was expecting double-quote to start field name
at [Source: java.io.BufferedInputStream@35fab6ff; line: 179249, column: 393373]
2020-10-06 01:47:52,539 ERROR org.apache.nifi.processors.parquet.PutParquet: PutParquet[id=f7baa377-0174-1000-b6f3-ee3d6768eadd] Failed to write due to org.codehaus.jackson.JsonParseException: Unexpected character ('B' (code 66)): was expecting double-quote to start field name
at [Source: java.io.BufferedInputStream@8295d5; line: 179249, column: 393373]: org.codehaus.jackson.JsonParseException: Unexpected character ('B' (code 66)): was expecting double-quote to start field name
at [Source: java.io.BufferedInputStream@8295d5; line: 179249, column: 393373]
org.codehaus.jackson.JsonParseException: Unexpected character ('B' (code 66)): was expecting double-quote to start field name
at [Source: java.io.BufferedInputStream@8295d5; line: 179249, column: 393373]
我们的想法是把所有的失败记录发送给制造它们的人
我的更新记录配置:
更新记录
ValidateRecord将是一种合乎逻辑的方式,因此您可能需要进一步调试ValidateRecord配置
或者,您可以引入一个SplitRecord处理器,将每条记录拆分为单独的流文件,这样一个转换失败不会影响任何其他记录,并且您可以根据需要将失败路由到任何地方。但是,这确实会带来开销,并可能影响流的整体性能。一个潜在的解决方法:
$NIFI_ROOT/conf/bootstrap.conf
中添加一个参数,将-Dfile.encoding=UTF-8
添加到早期的JVM参数中。它需要在参数顺序的早期,就像在Xmx和Xms之后一样。这将加载默认编码设置为UTF-8的JVM。我不知道Linux上需要它,但Windows上的默认字符集不是UTF-8 AFAIK