Apache nifi ApacheNIFI 1.4.0问题和问题

Apache nifi ApacheNIFI 1.4.0问题和问题,apache-nifi,Apache Nifi,我试图将数据从S3复制到HDFS,观察到了几个问题,并且没有什么问题 问题 Processor ConvertJSONTAVRO-如果流文件不是有效的JSON,那么处理器将陷入无限循环,并出现以下错误 ConvertJSONToAvro[id=c09f4c27-0160-1000-6c29-1a31afc5a8d4] ConvertJSONToAvro[id=c09f4c27-0160-1000-6c29-1a31afc5a8d4] failed to process session due t

我试图将数据从S3复制到HDFS,观察到了几个问题,并且没有什么问题

问题
  • Processor ConvertJSONTAVRO-如果流文件不是有效的JSON,那么处理器将陷入无限循环,并出现以下错误

    ConvertJSONToAvro[id=c09f4c27-0160-1000-6c29-1a31afc5a8d4] ConvertJSONToAvro[id=c09f4c27-0160-1000-6c29-1a31afc5a8d4] failed to process session due to java.lang.RuntimeException: Unexpected character ('"' (code 34)): was expecting comma to separate OBJECT entries
     at [Source: org.apache.nifi.controller.repository.io.FlowFileAccessInputStream@2ad7d50d; line: 8, column: 14]: Unexpected character ('"' (code 34)): was expecting comma to separate OBJECT entries
     at [Source: org.apache.nifi.controller.repository.io.FlowFileAccessInputStream@2ad7d50d; line: 8, column: 14]
    
    16:45:35 UTC
    WARNING
    c09f4c27-0160-1000-6c29-1a31afc5a8d4
    
    ConvertJSONToAvro[id=c09f4c27-0160-1000-6c29-1a31afc5a8d4] Processor Administratively Yielded for 1 sec due to processing failure
    
  • 处理器FetchS3Object-不管设置为“Object key”的值是多少,它总是选择${filename}的值。例如,如果“对象键”设置为“${Newfilename}”,它将忽略该值集并仅选择${filename}

  • 问题
  • 是否可以引用以前处理器的流程文件?我的用例是FetchS3Object(file1)->EvaluateJsonPath->FetchS3Object(file2)->PutHDFS->FetchS3Object(file1)->PutHDFS。 在这种情况下,不需要多次加载file1,而是可以在整个流中存储和引用它

  • 在上面这一点中,文件file1和file2是一个单元。是否有复制两个文件或两个文件都失败的选项

  • ListS3处理器根据时间戳加载文件。如果加载了文件,但在任何其他步骤中失败,则需要再次加载该文件以进行重新处理。一个选项是更新文件的时间戳,这样在下一次轮询期间它将对ListS3可用。如何在S3中更新文件的时间戳?或者有任何其他选项来处理这样的用例

  • 问题
  • 某些处理器发出失败事件,您必须将其映射到失败关系。其他处理器,如EvaluateJSONPath处理器,则在消息的无限循环中运行。这是一个开放的问题,处理器很少

    这里有一篇文章描述了构建定制NiFi处理器的过程:

    如果您想使用现有处理器/代码并为自己的目的进行修改,那么可以在此处找到许多标准处理器:

  • 有关更多说明,请参阅此处的实施

  • 问题
  • 使用Nifi UpdateAttribute向流文件添加属性。参考此

  • 上面的UpdateAttribute处理器应该可以解决您的问题

  • 将故障关系添加到LoadS3,然后将其传递给ExecuteScript处理器,相应地对其进行转换,并将其反馈给LoadS3处理器