NiFi是一个数据处理和分发系统,其中很重要的一部分是处理器(Processors)。一个处理器组合系统间的数据路由、转换或调解。处理器可以访问给定FlowFile的属性及其内容流。处理器可以在给定的工作单元中对零个或多个FlowFile进行操作,并提交该工作或回滚。
本文介绍NiFi处理器之一 :PutSQL。
描述
执行SQL UPDATE或INSERT命令。传入的FlowFile的内容应该是要执行的SQL命令。
属性
这里只介绍我使用过的配置:
名称 | 默认值 | 允许值 | 描述 | 提示 |
---|---|---|---|---|
JDBC Connection Pool | Controller Service API: DBCPService。 Implementations: DBCPConnectionPoolLookup; DBCPConnectionPool; HiveConnectionPool。 | 指定要将JSON消息转换为SQL语句的JDBC连接池。必须使用连接池才能确定适当的数据库类型。 | 用来执行适当数据库的插入或更新的SQL语句 |
使用说明
PutSQL处理器可以在配置中指定一个SQL语句,也可以直接执行流文件内容,这时,流文件内容是一条SQL语句。我使用的是后者这种方式,上游使用ReplaceText处理器生成SQL语句。
配置如下:
Name | Value |
---|---|
JDBC Connection Pool | PhoenixDBCPConnectionPool |
PhoenixDBCPConnectionPool是DBCPConnectionPool类型的Controller Services,配置如下:
Name | Value |
---|---|
Database Connection URL | jdbc:phoenix:zk1,zk2,zk3:2181 |
Database Driver Class Name | org.apache.phoenix.jdbc.PhoenixDriver |
Database Driver Location(s) | lib/phoenix/phoenix-4.13.1-HBase-1.2-client.jar |
这里有个问题,HBase的zookeeper.znode.parent属性必须设置为 /hbase,NiFi的DBCPConnectionPool才能连接上,原因未知,需要解惑。这个可能需要在NiFi中指定hbase-site.xml,或者jdbc url指定为jdbc:phoenix:zk1,zk2,zk3:2181/hbase-unsecure,以此指定要连接的目标。
在NiFi中,路径值可以使用绝对路径,例如 Database Driver Location(s) 的执行还可以写成 file:///opt/phoenix/phoenix-4.13.1-HBase-1.2-client.jar,当然这里需要保证该文件路径准确