应用场景2-2 | 学习笔记

简介: 快速学习应用场景2-2

开发者学堂课程【NiFi 知识精讲与项目实战(第一阶段)应用场景2-2】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/705/detail/12517


应用场景2-2

内容介绍

一、应用场景

二、总结


一、应用场景

写文件的流程运行一遍之后,文件成功写入,但仍然有如下两个问题没有解决:

1.在配置 put file 时,写入的目录并没有创建。但是,错误提示信息当中并没有报错。在运行之前创建出来并且运行是允许的。如果不创建该 Target 目录的话,是否还能够正常运行?是否是能够自动进行创建?

2.在运行过程当中,写入的读取文件有重复名称时,在写入时候会报错,提示报错信息,并不会覆盖写入。

image1.png

对以上2个问题进行解决。首先,如果在写入目录中,并不去创建。

验证 Target 目录是否能够自动创建、正常运转操作如下:

首先删除创建的 Target 目录:

[root@localhost tmp]# rm-rf target/

此时写入目的地已经不存在:

image2.png

此时,重新向 get Fire 中写入新的文件,查看是否能够正常运转。进入源文件目录,搜索目录,重新写入新的文件:

[ root@localhost source]# ls

[root@localhost source]# echo "hello-world" > hello-world.txt

运行之后,文件已经成功被读取, put file 没有报错。查看文件是否正常写入进入到根目录:  

[root@localhost source]# cd ../

[root@localhost tmp]# ls

此时,Target 目录已经成功创建。

进入到 Target 目录当中:

CD target

此时已经写入了一个文件。文件内容是 Hello Word,文件内容正确证明这个目标目录并不需要创建,会自动创建。是由于 put file 的处理器属性,在该属性当中有一个属性叫做创建缺失目录, Create Missing directories,默认值是true,由于默认为 true, put file 就会自动创建缺失的目录。这也就解释了为什么在目录删掉之后还能够成功运转,就是由于创建了目录,如果为 false,源文件会受到处罚,并且发送失败信息,也就是会处理不成功,并且报错。

 image3.png

以下图片显示,默认值为 true:

image4.png

如果将其改为 false,就会报错。此时无法修改是因为处理器是正在运行的状态,是绿色的箭头。如果要想修改配置信息,就必须先把它停止,停止完之后再进入编辑页面,此时就可以进行修改。将默认值修改为 false 之后,该目录如果缺失,就会提示错误信息,并且写入失败。试验如下:

改完配置信息之后,重新启动,启动之后把 Target 目录删除:

[root@localhost tmp]#rm-rf target/

[root@localhost tmp]# ls

重新进入source目录之后,重新写入文件:

[ root@localhost source]# ls

[ root@localhost source]# echo "hello world" > hello-world.txt

此时进行查看,已经被读取成功读取,刷新查看状态,发现已经报错。

提示错误信息:

image5.png

从该错误信息中可以得出错误信息:缺失目录。因为目录不存在,处理器配置不会创建缺失的目录。此时文件写入不成功。 Target 目录没有出现,只有 source 目录。问题解决,先将处理器停止,并且将配置信息改为 true。

在写入文件时,写入了三个文件,但只有两个文件写入成功,还有一个写入失败,在报错信息中可以得出有2个文件名是重复的。问题解决:

在处理器配属性配置当中,有一个配置项叫 conflict Reflection,strategy,也就是解决冲突策略,默认值是 fail。当输出目录当中已经存在了同名文件时,就会提示错误信息,并且写入失败。如何能够让其进行覆盖写入,在该属性当中有3个可选值,除了失败之外,还有replace覆盖写入,ignore 忽略。如果想要进行覆盖写入,就选择 replace。测试: 此时修改 put file 属性配置,在属性配置当中选择 conflict Resolution strategy,将该默认值改为 replace:

image6.png

进行保存之后,重新启动流程。此时,重新写入文件进行测试:

[root@localhost source]#

ls [root@localhost source]# echo "hello world" > helio-world.txt

写入一个文件之后,再写入一个重名文件,将内容进行修改。在写入之前,先查看目标目录下是否已经成功写入,并查看文件内容是否正确:

[ root@localhost target]# ls hello-world.txt

[root@localhost target]# cd ../ source/

[ root@localhost source]# ls

经过确认,已经成功写入并且内容正确。再重新创建一个同名文件,让文件名保持一致,将内容进行修改,进行验证:

[ root@localhost source]# echo "hello world agin"

进入 Target 目录中,查看内容是否被覆盖写入,是否写入成功:

image7.png 

经查看,已经成功覆盖写入,处理器没有新的报错信息。此时证明问题已经解决。任务执行完之后,如果不再进行使用,需要将其关闭,如果不关闭,就会不断运行,占用服务器资源。

 

二、总结

应用场景一共做了两个,如何实现数据流的处理:

首先创建处理器,创建的第一个处理器是 get file。创建完处理器之后,设置处理器属性,配置处理器,在配置过程当中,需要注意熟悉了解处理器的属性。如果处理器属性不提前通过官方文档了解清楚,那么就不能很好的使用NiFi。最后创建后续处理器,此时创建的后续处理器是 put file。创建完 put file 之后,进行配置和连接,过程与 get file 相同,必须熟悉处理器的属性,配置完之后进行连接,连接处理器 get file 和 Put file。

通过以上流程操作,实现了文件的读取和写入功能。以上功能如果使用代码开发相对比较麻烦。通过 NiFi,可以用可视化工具方便进行配置和运行。

相关文章
|
开发工具
Vim 模式切换 | 命令集
Vim 模式切换 | 命令集
421 0
|
NoSQL Ubuntu Redis
docker(三):常用命令
docker(三):常用命令
218 0
|
数据采集 前端开发 JavaScript
Python爬虫之Ajax数据爬取基本原理#6
Ajax数据爬取原理【2月更文挑战第19天】
252 1
Python爬虫之Ajax数据爬取基本原理#6
|
算法 Java 数据库连接
MyBatis-Plus详解(2)
MyBatis-Plus详解(2)
188 0
|
机器学习/深度学习 人工智能 达摩院
2022最火的AIGC落地怎么用,阿里达摩院团队深度解读
2022最火的AIGC落地怎么用,阿里达摩院团队深度解读
1004 0
|
JavaScript
Error: Unsupported URL Type: npm:fork-ts-checker-webpack-plugin@^5.0.11
如果你去搜索,答案都是去升级你的npm 在StackOverflow说是vue3得在非vue-cli环境得单独配置。地址: 还有说npm install --save-dev fork-ts-checker-webpack-plugin 众说纷纭,都解决不了
249 0
|
Linux C++ iOS开发
Python 实现贪吃蛇小游戏 pyinstaller打包成exe
PyPoice是SDL多媒体库的Python包装模块。它包含Python函数和类,这些类和类允许使用SDL对CDROM、音频和视频输出、键盘、鼠标和操纵杆输入进行支持。 Pygame是一个利用SDL库的写就的游戏库, 是一组用来开发游戏软件的 Python 程序模块。SDL,全名Simple DirectMedia Layer
464 0
Python 实现贪吃蛇小游戏 pyinstaller打包成exe
|
SQL 关系型数据库 MySQL
SQLAlchemy简介与入门
SQLAlchemy简介与入门
464 0
SQLAlchemy简介与入门
|
机器学习/深度学习 测试技术 Python
精心整理python和自动化测试的小技巧:第二节
精心整理python和自动化测试的小技巧:第二节