应用场景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,可以用可视化工具方便进行配置和运行。

相关文章
|
5月前
|
机器学习/深度学习 人工智能 自然语言处理
|
27天前
|
数据采集 机器学习/深度学习 搜索推荐
Python爬虫技术基础与应用场景详解
本文介绍了爬虫技术的基本概念、原理及应用场景,包括数据收集、价格监测、竞品分析和搜索引擎优化等。通过一个实战案例展示了如何使用Python爬取电商网站的商品信息。强调了在使用爬虫技术时需遵守法律法规和道德规范,确保数据抓取的合法性和合规性。
|
4月前
|
Kubernetes 容器 Perl
K8s是什么?k8s应用场景是什么?
K8s是什么?k8s应用场景是什么?
|
4月前
|
监控 安全 网络协议
EIPX-660的特性、优势及其应用场景
EIPX-660的特性、优势及其应用场景
|
5月前
|
数据采集 存储 弹性计算
产品优势及应用场景
产品优势及应用场景
48 3
|
5月前
|
机器学习/深度学习 搜索推荐 算法
2024年将成为大模型应用场景之年
【1月更文挑战第9天】2024年将成为大模型应用场景之年
110 2
2024年将成为大模型应用场景之年
|
5月前
|
负载均衡 Kubernetes 混合部署
k8s 中externalTrafficPolicy应用场景和实践
在Kubernetes(K8s)中,`externalTrafficPolicy` 是一个用于控制服务的外部流量的策略。这个字段可以在 `Service` 的定义中设置,其主要作用是决定服务对外部请求的负载均衡行为。具体来说,`externalTrafficPolicy` 有两个可选值: 1. `Cluster`: 默认值。当设置为 `Cluster` 时,服务将负载均衡流量到所有的 Pod,无论这些 Pod 是否在同一节点上。这意味着即使请求来自于同一节点的多个 Pod,流量也可能被负载均衡到不同的节点上。 ```yaml apiVersion: v1 kind: Se
465 0
|
存储 SQL 缓存
大数据基本概念与应用场景
大数据基本概念与应用场景
|
Unix Linux 开发者
应用场景2-1 | 学习笔记
快速学习应用场景2-1
113 0
应用场景2-1  |  学习笔记
|
存储 数据建模 开发者
应用场景1 | 学习笔记
快速学习应用场景1
139 0
应用场景1  |  学习笔记
下一篇
无影云桌面