在nifi中,如何调用在参数

时间:2017-07-12 10:46:35

标签: apache-nifi

我有一个外部程序,一个电子书转换器,将.epub转换为.txt。 这个转换器请求一个文件作为输入,另一个文件作为输出,文件名在这里很重要,因为扩展用于确定应该进行哪个转换,也是我在测试时看到的,程序正在对输入文件执行搜索。所以这些禁区预先使用命名管道或SDTIN重定向。

对于另一个项目,或者至少是一个POC,我将必须封装一个现有的工具包,其工作方式与上面相同,并重新创建Nifi之间的工作流程。

短期内,无法编写自定义处理器。

那我该怎么做呢?

我找到了几个可能的解决方案:

  • 创建一个将文件放在临时位置的PutFile处理器,将其与executeStreamCommand链接,执行外部命令并将输出放在临时位置并使用fetchFileProcessor对其进行链接。但这里的问题可能是我必须找到一种清理临时文件的方法。

  • 另一个解决方案是创建一个与ExecuteScript一起使用的脚本来执行以下操作:使用基于属性的文件名将流文件写入磁盘,执行外部命令,将输出文件读取到流文件并执行一些清理。但是从我发现的情况来看,从这个处理器写入磁盘并不容易,对吧?

那么我应该去哪个方向,任何建议?

1 个答案:

答案 0 :(得分:2)

你走在正确的轨道上。我想你可以做一系列处理器,如下所示:

  1. UpdateAttribute - 为输入和输出文件名创建属性。
  2. PutFile - 写入临时输入文件。
  3. ExecuteProcess - 运行转化工具。我建议将其包装在shell脚本中,这样就可以在完成时清理临时输入文件。
  4. FetchFile - 将转换输出读入FlowFile内容。使用<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <table class="table table-bordered"> <thead> <tr> <th>ID</th> <th>Tanggal</th> <th>Judul Pekerjaan</th> <th>Deskripsi</th> <th>Level</th> <th>Category</th> <th>Severity</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>1 May 2017</td> <td>Satu</td> <td>Satu</td> <td>5</td> <td>Lorem</td> <td>Ipsum</td> </tr> <tr> <td>2</td> <td>2 May 2017</td> <td>Dua</td> <td>Dua</td> </tr> <tr> <td>3</td> <td>3 May 2017</td> <td>Tiga</td> <td>Tiga</td> </tr> <tr> <td>3</td> <td>3 May 2017</td> <td>Tiga</td> <td>Tiga</td> </tr> <tr> <td>2</td> <td>2 May 2017</td> <td>Dua</td> <td>Dua</td> </tr> <tr> <td>3</td> <td>3 May 2017</td> <td>Tiga</td> <td>Tiga</td> </tr> <tr> <td>3</td> <td>3 May 2017</td> <td>Tiga</td> <td>Tiga</td> </tr> </tbody> </table> Completion Strategy来清理转换后的文件。