开发者学堂课程【NiFi 知识精讲与项目实战(第三阶段):离线同步 mysql 数据到 HDFS3】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/707/detail/12546
离线同步 mysql 数据到 HDFS3
内容介绍
一、实际操作演示
二、操作运行启动验证
一、实际操作演示
进行设置,第一个配置项是从根节点进行拆分,所以说里面写$.*,$代表是根目录,根节点,在后面还会再去使用JsonPath 的时候,会再详细的去讲解 JsonPath 使用方法。
第二参数是当遇到处理里面默认是空的,如果它是空的默认返回是空的,第二种是会返回 nall 的字符串,里面使用默认的配置,然后保存,然后再把 convert up to Json 和 splite json 进行连接。连接时,肯定的选择 success 关系,是说当他成功的转换成阶次以后,才成功流转到的阶段,是失败的让他留在行,不需要再往后流转。在给他再设置自连接,时不再报错。
splite json 也配置完之后,会生成的单独的介绍对象,然后要把些对象写入到 HDFS 当中,在最后要需要再拖入叫做put HDFS 的处理器。接下来对 put HDFS 处理器进行设置,然后在 put HDFS 当中,来看属性配置,首先第它是的Hadoop 配置文件,很多的配置文件,也是的 Hadoop set 以及 fall 两配置文件。两配置文件,里面也要把它拷贝到的 NIFI 服务器当中才可以。
在 HDFS 是在 export 登录的 config 的目录下,现在没有目录,可以在 make dir 来创建。时已经进入的文件夹,需要把它的配置文件放置进来,配置文件在 Hadoop 集群当中,是需要先有些配置文件,才能够启动起来 Hadoop 集群。
所以只需要到的 Hadoop 集群当中来把配件拿出来。比如说可以在 server 当中有 hadoop 里面,在里面去找到 etc,然后在里面可以看到有叫 core-site,还有是 hdfs-site 的两配置文件,把两配置文件下载下来,直接放到的目标。里面已经下载不再重复下载,直接进行上传。
在的 hadoop 目录下,两配置文件,把它拖动过来,已经算出来成功。来看 ls。已经存在,也给赋权限。
两文件配置文件全部都有,然后可以在处理器当中配置属性,注意点是属性,它两配置文件中间使用逗号。来复制,进行粘贴。
把配置文件配置完以后,然后还需要配置要写入的目录,黑色的加粗的,目录写入到 user hive ,数据目录可以看,它的 ware house 里面,NIFI test 的样的数据库,有表叫做 user-info-nifi 类似样的目录。
打开的 hue 里面,打开 score2里面来输入的文件,可以看到没有目录,删掉层看它上级,上级也没有,再删掉层,而ware house 是有的,它下面有数据库是 hive 。让它输出,看它会不会自动创建文件夹。
文件夹写好之后,然后还有 Conflict Resolution,主要是指策略,写入策略。可以看到策略里面有 replace 覆盖,忽略还有提示错误信息,以及 append 追加。
选择 append 让他去往文件夹里面不断的进行追加写入。配置完,点击的 apply,PutHDFS 配置完毕以后,再接下来可以把他们俩进行连接,有三关系,failure、original 、split,failure 是失败 original 指的是原文件,split 指的是切割以后单独接收对象。
需要的是 spilit 关系里面的数据,其他两数据是不需要的。里面其他两关系没有目的地,让他做自连接,他不再报错,此时 spilit 也来做自连接,因为它本身是最后节点。
二、操作运行启动验证
NIFI 配置完毕。接下来要运行,测试,看看是否能够正常的使用。测试先不用急的全部启动,可以先逐的启动来查看。 首先启动的 Query database table。可以看到在里面它是有进程,有线程正在运行的,发现他有报错,把它停止,看报错提示。
Unable to execute SQL select query SELECT id,name,mobile,email son-json FROM user info-nifi WHERE(1=1 limit 5)样的写法证明是不行的,他是写小括号,不能加 limit5 ,不能通过这样的方式,把 limit5去掉再来点编辑。在的 property 当中,limit 5去掉,然后再点击 ok。然后再来启动,可以看到它是已经成功,并且写入数据。
停止,来看具体的数据。点击查看详情,确实已经拿到数据库当中的数据。里面保存的格式,比如说:张三25岁以及 ID 的值等等,全部都读出来。证明正常运转,但是它其实并没有满足的要求。因为把 limit 给去掉,在正常工作流当中,sql 语句肯定是会有各种各样的条件,具有限制,肯定是不方便去做处理的。点击 property 在之前配置的时候说过 Query database table 有两种的配置方式来进行查询。现在用的是第一种,可以用第二种,先把给删除掉。然后外部条件也去掉,自己写 SQL 语句,在 Custom query 进行书写,是用户自己写的 SQL 语句,应该是去执行 SQL 语句叫做 select,SELECT id,name,mobile,email son-json FROM user info-nifi 并在后面直接加入 limit5, Sql 语句添加进来,直接进行查询是不行的,它会出问题。先执行,试试。
先把队列当中的数据,先清空,怎么清空右键有 empty,点击之后,会把队列里面数据清空。
看到它已经变成0,然后再来执行,他也有数据写入进来,看有没有新的报错。把数据查询出来,他没有报错。之前测试确实是会产生失败信息,已经成功运行,加条件再加 where,再次试验,因为之前在旧的版本当中确实不行的,where 1=1,然后 limit5。 然后再来运行 apply。
现在是对接当中是一条数据。再来进行,它也能正常的运行。也是说里面它其实现在新版本已经把问题给优化,不需要更改配置项,它也是可以去正常的执行的。数据是正常的,大数据也是正常的。证明 Query database table 现在他已经可以正常的工作。
现在它全部都是 Avor 格式的数据,要做的是把它转换成 Json 格式。刚才在查看队列数据的时候,会发现里面数据它会有些乱码问题,是 Avor 格式。如果转化成 Json 以后,比较方便去读数据。
接下来运行第二处理器,是否可以正常运行。此时运行成功看到数字已经消失,把它清理掉,然后右键点击来查看它进行结果。
发现它数据已经产生变化,已经变成 Json 格式的数据,可以把 Json 数据复制出来,复制出来以后,通过的格式化工具,把它格式化。Json 打开,打开以后再把它粘贴进来,然后通过 Format 进行格式化。看到转换以后的数据,把格式化以后的数据复制出来,进行粘贴是 Json 数据。
里面是最外层的中括号是 Json 数组,它里面每大括号,是 Json object 的对象,每一个 Json object 的对象实际上对应数据库当中的数据记录, id,name,mobile,email son-json 模样的。
继续执行,进行切割,把刚才所看到的切割成单独的 object 已经消费完,此时再来停止。队列的数据变成4条之前都是2条,因为把它切割,刚才看到 limit5,说明每次查询是有5条数据,共查询两次肯定是10条,最后共10条数据。任意点击。可以看到数据它变成大括号样的形状,也是说它是的 Json Object,它里面包含 ID 属性、name 属性、mobile 属性,字段信息此时已经切割完成。
最后来执行,看看能不能把些写入到 HDFS 目录,先把目录复制,目录刚才已经看过,是没有文件夹的,看看是否会自动创建。
再来启动最后处理器,去写硬盘或者读取硬盘的时候都会比较慢,慢和 NIFI 是没有关系的。比如说读 mysql 数据库,不是 Nifi 慢是 mysql 慢,现在写 HDFS 也慢,但不是 Nifi 慢瓶颈在于 HDFS,所以说有的时候并不是的 NIFI 性能不够,而是说要去优化它所依赖的些环境,比如说的 HDFS 者 hive 或者 Mysql 时候运行成功结束,把它停止掉,全部数据已经消费完,他也没有报错。
文件夹已经存在,再来点回车。可以看到目录真的已经有,而且目录下面还存在两新的文件,有两新文件,点击来进行查看。可以看到在文件当中保存的条条的 Object 是刚才所发送每条单独的 Object 数据。


















