数据来源和变量及表达式
一、数据来源
NiFi对其摄取的每个数据保存明细。当数据通过系统处理并被转换,路由,拆分,聚合和分发到其他端点时,这些信息都存储在NiFi的Provenance Repository中。为了搜索和查看此信息,我们可以从全局菜单中选择数据源(Data Provenance),也可以在对应的处理器上右键选择“View data provenance”进行查看。
以上表格默认显示1000个最近的事件信息。当点击每个事件前面的“i”标记时,可以查看当前事件的详细信息:
还可以通过点击“Lineage”查看FlowFile的执行流程关系:
左下角的滑块允许我们查看这些事件发生的时间。通过左右滑动,我们可以看到哪些事件花费了较长的时间,这样我们可以分析瓶颈,得知哪些节点需要更多资源,例如配置处理器的并发任务数。
二、变量及表达式
FlowFile由两个主要部分组成:内容和属性,我们可以在一些情况下引用FlowFile对应的属性,这里就可以使用表达式来获取对应的属性,甚至有时候我们还需要自定义一些属性值方便灵活处理数据流,这就是定义变量。
定义变量
在画布空白处右键选择“Variables“:
在弹出的框中添加变量:
点击“OK”后,弹框填写“value”值:
按照以上方法继续添加“output_path”变量对应value为“/root/test/B”,添加完成之后如下:
以上添加的变量是在主面板上添加,主面板上添加的变量可以在各个组内使用,也可以在每个组内添加变量,如果变量名称冲突,在组内定义的变量对应的值生效。
使用表达式
表达式用来引用DataFlow属性或者引用定义好的变量,方便在创建和配置数据流时使用他们的值。NiFi表达式语言始终以符号"${"开始,并以符号"}"结束,在开始和结束符之间是表达式本身的文本,在其最基本的形式中,表达式可以仅由属性名称组成。例如,${filename}将返回filename 属性的值。
在稍微复杂一点的示例中,我们可以改为返回对此值的操作。例如,我们可以通过调用toUpper函数来返回文件名的全部大写版本 ${filename:toUpper()}。在这种情况下,我们引用该filename 属性,然后使用该toUpper函数来操纵该值。其中":"表示调用toUpper()函数,也可以将多个函数通过":"符号连接在一起实现多次调用函数,例如:${filename:toUpper():equals('HELLO.TXT')} 判断文件名是否是某个值,函数数量没有限制,关于更多函数参照官网:
http://nifi.apache.org/docs/nifi-docs/html/expression-language-guide.html
在演示将目录A下的数据文件导入到目录B下案例时,B目录是手动写死的,这里我们定义好了变量可以直接在处理器属性中引用值。进入到“First Group”中,可以右键选择“Variables”变量查看到在上一层组定义的变量,这里我们直接配置“GetFile”和“PutFile”的路径如下:
经过以上设置,清空node1、node2、node3节点”/root/test/A”和”/root/test/B”目录,每个节点重新创建“/root/test/A”目录,并复制粘贴一些文件到该目录下,启动“GetFile”和“PutFile”处理器,可以观察WebUI页面,数据被处理,在对应的“/root/test/B”目录下有数据。
注意,在处理器“Properties”页面中有很多属性,有些属性值不支持表达式引用值,可以在对应的属性上点击“?”符号来查看是否支持表达式:
网友评论