Nifi:我可以对Kerberos主体和Kerberos Keytab使用变量吗?

时间:2019-08-14 17:11:09

标签: variables expression kerberos apache-nifi

我有来自三个不同来源的文件进入“ PutHDFS”处理器。这三个源均具有单独的密钥表,并将进入不同的目录。由于源名称在文件名中,因此我可以创建一个名为“ source_name”的变量,并且可以使用它来使目录正常,例如:

/my/hdfs/directory/${source_name}/reports

我想对Kerberos Principal和Kerberos Keytab做类似的事情,

Kerberos主体:$ {source_name} @ acme.com

Kerberos密钥表:/ home / nifi / keytabs / $ {source_name} .keytab

但是,Nifi从字面上读取了这些值,并且我收到错误消息,它“无法验证${source_name}@acme.com”

Nifi文档说这些字段支持表达语言,但是在Nifi本身(1.7版)中,它说这些字段仅支持“仅变量注册表”。尽管进行了广泛的搜索,但我仍然无法确定“仅变量注册表”的含义。我是否被迫对kerberos值进行硬编码?

1 个答案:

答案 0 :(得分:1)

表达语言允许引用来自多个不同来源的值,并且它按以下描述的层次结构工作:

https://nifi.apache.org/docs/nifi-docs/html/user-guide.html#Using_Custom_Properties

当它说“仅限变量注册表”时,表示该属性的表达式语言语句无法访问传入流文件中的值。

这样做的主要原因通常是因为这些值需要以每个流文件都无法使用的方式使用。例如,HDFS处理器需要在处理器启动时执行kerberos登录,然后定期更新票证。对于无限数量的传入流文件值执行此操作将变得难以管理。

更新:

这可能是对表达式语言可以访问的值的层次结构的更好描述:

https://github.com/apache/nifi/blob/master/nifi-api/src/main/java/org/apache/nifi/expression/ExpressionLanguageScope.java#L20-L38