nifi之读取mysql数据库(离线同步)
效果
要求时间较紧,两天呢要完成,自己对这个nifi又是第一次接触,非常的不易,这个效果图是一个综合的效果,不是本篇文档的效果图,
注意,nifi非常的强大,后期我们主要利用它近50个平台的数据收集
nifi
选择处理器
QueryDatabaseTable:来读取数据库信息
生成SQL选择查询,或使用提供的语句
创建组
组的主要作用就是,把处理器进行分组
因为咱这个是最后的目标是从mysql数据库里面读取数据然后再放到mysql数据中,来进行的一个模拟的操作动作,所以我的组名就叫mysql_to_mysql,这个名称大家可以自己根据实际情况而改动
新建处理器
修改处理器名称
主要是为了方便一眼可以看出来这个处理器是干什么的
【双击处理器】
更改处理器属性
创建一个连接池
配置连接池
输入mysql的url的java驱动地址
上传jar包
jar包添加权限
[root@localhost jars]# ls
mysql-connector-java-8.0.26.jar
[root@localhost jars]# chmod +rwx mysql-connector-java-8.0.26.jar
[root@localhost jars]# ls
mysql-connector-java-8.0.26.jar
配置属性的账号密码
启动连接池
配置QueryDatabaseTable处理的属性
上面的连接池已经配置好了,只是说可以正常的连接数据库了,我们需要配置这个处理器,让可以从数据库里面提取数据
配置RunSchedule时间
这个时间就是这个处理器多长时间进行一次操作数据库,默认是0,如果是0的话,可以说是不停的查询数据库,这样对服务器的负担太大了,所以在这里我们把它改成9999sec,基本就是这个处理启动之后就会执行一次,对于测试来说已经足够了,这个可以根据实际需求情况,自己来设定时间。
选择数据库类型
添加表名
在创建连接池的时候有个数据库的url,里面就指定了数据库的名称,所以这边只要填写表名即可
填写查询语句
这个一般有两种方法查询
第一种
如果要查询select * from tables where id =5 limit 1:这个语句的话,这个limit 1就没有办法实现
第二种
我们这里用第二种方法
确认一下sql语句是否可以执行
我这个里面少提取了一个name字段,我自己加上了,大家要注意一下.
填写配置
这个是增加了name字段的,大家可以根据实际情况考虑加或者不加,如果后期数据处理需要这个字段就加上
该处理器就配置好了
发现报错信息
这个是因为处理器没有上下游的原因,我们需要给他创建一个下游
由于我们从数据库里面提取出来的数据是avro格式,所以我们需要转化为json格式来方便我们的阅读
创建ConvertAvroToJson处理器
小编这里处理器选错了哈,在下篇小编会改正过来,大家可以按照这个处理器进行,这个处理也就起到了一个下游的作用
更改下处理器的name
连接两个处理器
启动QueryDatabaseTable,查看数据库操作情况
注意:只有处理器上面没有任何的错误信息显示的时候,才能开启处理器,否则开始按钮是灰色的
出现报错
其实这个错误看着像是java驱动出现了问题,但是这里的原因是连接不上数据库呢
所以要注意以下几点
- 要保持nifi服务器与mysql数据库服务器之间是可以连接的
- 可以在nifi服务器上面连接以下数据库,如果可以正常连接的话,可以排查驱动包的问题了
- 数据库中要配置支持远程账户和ip,当然如果数据库在本地计算机上就不用考虑这个了
更改mysql的url地址
启动处理器
可以发现有一条消息已经进入
查看信息
可以看到我们已经成功的在nifi上面获取到了信息,这不过都是乱码,为什么呢,是因为导出来的数据库信息是avro格式的,所以我们后面又加了一个处理器,可以转json格式的处理器,由于时间问题,转json处理器,下篇小编再继续