在Apache NiFi on Cloudera中,有一种常见的情况是在数据流处理中使用变量。但是,通常,这些变量是在非授权的组件中声明的。这就导致了安全性的问题,因为访问这些变量的人可能有意或无意地改变数据流。为了解决这个问题,需要将变量引用从未授权的组件转移到处理器中。
以下是一个使用NiFi表达式语言的示例。在该示例中,变量名被硬编码为”myVariable”,这是因为在NiFi中,使用特殊表示法时表达式中的变量和另外的参数是用大括号括起来的。在本示例中,我们将变量值设置为流水线的执行时间戳(epoch)。
代码示例:
${now():toNumber()} ->在这种情况下,now()
函数返回的值是表达式被执行时的当前时间戳。toNumber()
函数将该时间戳转换为数字,并将其存储在变量中。
为了将变量引用从未授权的组件转移到处理器中,需要更改模板中的现有组件,在组件中使用表达式语言设置变量,如下所示:
${myVariable} -> 使用表达式语言将变量名设置为图示中显示的变量值。此时,该变量被硬编码为”myVariable”。
将上述描述中的方法应用于模板中的其他组件。这样,在引用该变量时就可以直接引用它。
现在,您可以在处理器中引用此变量,以避免更改数据流的任何尝试。