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

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

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

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


应用场景2-1

内容介绍

一、应用场景  

一、应用场景

第二个处理器是 put file,可以和第一个处理器 get file 启动、运行、查看最终结果。首先需要添加处理器:

1.png

此时处理器叫 put file。

添加完处理器以后,设置处理器的属性

2.png

此时设置的是 put file 中需要设置写入的目录。会把 FLOW file 的文件文本读取到目录当中。以下是 put file 处理器所特有的属性:

Name 

Default value

Allowable values   

Description  

Directory(目录)

文件应写入的目录。您可以使用表达语言,例如/ aa / bbl$ {path}。 支持表达语言: true(将使用流文件属性和变量注册表进行评估) 
Conflict Resolution Strategy (解决冲突策略)  fail

Replace Ignore Fail 

指示当输出目录中已经存在同名文件时应该怎么办
createMissing irectories(创建缺失目录)  true True false 如果为 true,则将创建缺少的目标目录。如果为 false,则流文件将受到处罚并发送失败。 
Maximum FileCount(最大文件数) 

指定输出目录中可以存在的最大文件数 
Last ModifiedTime(上次修改时间)

将输出文件上的 lastModifiedTime设置为此属性的值。格式必须为ywy-MM-dd'T'HH:..mm: .ssZ。 您也可以使用表达式语言 例如 $file.lastModifiedTime} 支持表达式语言: true(将使用流文件属性和变量注册表进行评估)
Permissions(权限))

将输出文件的权限设置为此属性的值。格式必须是带有-的 UNIX rwxrwxrwx(代替拒绝的权限)(例如rw-r--r--)或八进制数(例如644)。您也可以使用表达式语言 例如 ${file.permissions}。 支持表达式语言: true(将使用流文件属性和变量注册表进行评估)
owner(所有者)

将输出文件的所有者设置为此属性的值。您也可以使用$ifile.owner}之类的表达语言。请注意,在许多操作系统上,Nifi 必须以超级用户身份运行才能拥有设置文件所有者的权限。 支持表达式语言: true (将使用流文件属性和变量注册表进行评估)

Group(组)

将输出文件上的组设置为此属性的值。您也可以使用表达语言,例如$ {file.group}。 支持表达式语言: true(将使用流文件属性和变量注册表进行评估)

因为 put file 和 get file 较为相似,所以处理器属性也有许多相似的地方。

(1)目录设置,该目录设置主要指的是写入文件的目录,而不是读取文件的目录。这个目录设置完之后,会把文件写入到该目录当中。

(2)解决冲突的策略,与之前 get file 不同。在写入文件时,如果文件存在同名文件时有3个选项。第1个是 Replace,也就是覆盖。第2个是 ignore,也就是忽略,第3个是fail,就是提示失败,报错信息。

(3)Create Missing directories也就是创建缺失的目录。 该选项默认是true。 如果创建的目录此时还没有,就会自动进行创建。 如果是 false, 没有标记设置,写入目录时就会提示失败信息。  

(4)最大文件数,写入文件时一次性批量写入的最大文件数。不是一次性,是所有的最大文件数。当写入的所有文件超过了最大文件数之后,就不会再写入。

(5)Last Modified Time,也就是上次修改的时间。主要是将输出文件上次更新的时间设置到该属性上。必须要满足规定的格式才能够设置,如果和格式不一致,识别不成功。也可以使用表达式语言。

(6)权限,输出文件的权限设置到此处,格式是Linux中的格式。 R 就是 read ,W 就是 write ,S 就是执行。当前用户组和其他用户或者是 Linux 常用的数字,以上是文件的权限。写入之后,该文件就拥有权限。

(7)Owner,所有者。当文件写入到另一个系统之后,文件的所有者是谁,可以在其中进行设置。如果想拥有该功能,NiFi 用户必须使用超级管理员的身份运行才能够执行,如果不是超级管理员运行,就没有办法给其他用户复制文件的权限,这也是关键点,一般推荐使用 root 账号启动 NiFi。

(8)group 组,相当于把输出文件上的组,设置到该属性上,与用户类似,要求必须使用超级用户的身份运行 NiFi,否则没有权限执行。 以上是 put file 的属性。 标粗的属性是必填项,没有标粗的属性是选填,可以不填写。其中3个必填项当中,有2个选项有默认值,可以不用设置,使用默认值即可,只需要设置的一个必选项即可,也就是需要设置写入目录。设置完目录之后,接下来创建写入文件的目录: mkdir -p /export/tmp/target

之后连接两个处理器:

3.png

连接以后,可以启动 get file:

4.png

启动 get file 之后,就会开始进行数据的读取。 在创建的时候需要注意选择连接的关系, 其中关系较为简单,只有success,所以不涉及到复杂的问题。 启动 get file 之后,就可以在源读取的目录当中,写入新文件,叫 Hello World:

cd /export/tmp /source

echo "he11o wor1d" > he11o-wor1d.txt

写入文件之后就可以观察结果是否能够正常读取:

5.png

如果能够被 NiFi 读取,NiFi 数据读取到何处, 再继续写入文件:

echo "he11o wor1d" >Hello-world.txt

echo "he1lo wor1d" > hello-world2.txt

继续观察 NiFi 的情况:

6.png

最后将 put file 做自连接:

7.png

自连接的作用就是避免报错信息。

之前做 get file 时,有一个错误信息提示,是因为关联关系叫 success,没有任何目的地,如何防止报错,第一种方法是将其连接到其他组件,另一种就是自连接 put file,采用的方式就是自连接来避免该问题。将错误解决之后,就可以启动。处理器启动之后,会发现有错误信息。此时进行错误信息解决。错误信息如下:

8.png

错误信息提示文件目录不存在。不是文件,不存在,而是文本重复的问题。接下来还有覆盖写入以及重复写入文件、关闭处理器等一系列操作,以下是演示练习:

从第一个步骤开始执行,首先添加一个处理器,这个处理器叫 put file:

9.png 添加完 put file 之后,接下来要对 put file 进行设置。可以右键,也可以双击打开设置: 

10.png

打开设置之后,可以在其中修改文件名,此时没有重复,文件名不修改也允许此时可以将其改成 Put file target:

11.png

配置完名称之后,需要配置属性,在 properties 选项卡当中。目录是配置目录。目录设置为 export,依然是 tmp 临时目录下,最后加上 Target:

12.png

但是 Target 目录不存在,没有进行创建。进行查看在 TMP 目录下,只有 south,没有 Target。此时错误信息中没有提示目录不存在:

13.png

先将目录创建:

Mkdir Target

此时目录已经存在。创建目录之后,就需要连接 get file 和 put file 2个处理器。连接时,默认选中 success 关系:

14.png

因为只有一个关联关系,当处理器只有一个时会被默认选中,如果有多个就需要手动选中。此时点击 add,于是建立上连接关系:

15.png

连接关系可以通过双击或右键打开查看连接信息:

16.png

连接信息显示,从 pick Up 处理器过来类型是 get file,到 put Target 处理器去,类型是 put file。属于根处理器组,由于还没有创建组,所以默认组就是在根节点。以上是设施信息,设施信息可以进行配置。创建完链接之后就可以进行测试,此时启动 Get file,启动之后可以查看文件是否有变化,此时文件并没有变化。因为文件是空的,就需要创建一个文件出来,看处理器是否能够成功读取到。此时通过如下命令:

[root@localhost tmp]# cd source/

[ root@localhost source]# ls

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

再通过 ls 查看:

[ root@localhost source]# ls

发现该文件没有被写入。因为该文件被处理器读取,读取出来之后就会将源文件删除。此时在处理器当中有一个数据已经写入到队列当中。

在该队列当中,1代表有一条数据,12代表数据,大小是12 Byte:

17.png此时文件再继续写入文件,继续在来源目录下写入文件:

[root@localhost source]# echo "hello world1" >

hello-world.txt

此时进行查看,发现依然没有变化。通过右键刷新之后产生变化,发现数字变成了2,大小变成了25 Byte,是刚才的2倍: 

18.png

证明读取成功。再继续写入,文件名改为 Hello World2.TXT:

[root@localhost source]# echo "hello world2" >

hello-world.txt

此时再继续回到 NiFi 当中,刷新,数字变成了3:

19.png表示读取到3个文件到队列当中。用处理器读取将信息写入到队列当中,有3个文件,总大小是37 Byte。如何让 put file 把读取的文件数据写入到目的地文件夹,此时就需要启动 put file。发现右键之后,没有启动按钮:

20.png 因为还有一些错误信息没有处理,错误信息一是关联关系没有连接: 

20.png

如果没有链接,就必须配置链接,数据走向此处已经结束,后面没有数据,那么就采用自连接。打开配置项之后,勾选关联关系,就成为了自连接:

21.png

不论是成功还是失败,就在此停止。此时没有错误信息,能够启动。右键 Start 开启之后,右侧有一个1,鼠标移动到上面会提示有一个线程正在运行,将鼠标移动上去,会发现有报错信息:

22.png

routine to future as conflict because fill with the same name already existed

也就是说写入的文件已经有重复的文件名存在,所以写入失败。此时来到目标目录下,进入 Target 目录,发现已经有2个文件。可以通过 get 查看2个文件的内容是否正确。此时,Hello World 是正确的。报错是由于在刚才写入时,一共写入了三次文件。其中,前两次文件名一致,第一次写入成功之后,第二次再写入,因为文件名重复,所以写入失败。以上就是 put file 运转流程。现在还存在问题:

(1)如何解决该报错信息

(2)如果该目录不创建,是否会自动执行。 

相关文章
|
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 缓存
大数据基本概念与应用场景
大数据基本概念与应用场景
|
数据可视化 开发者
应用场景2-2 | 学习笔记
快速学习应用场景2-2
113 0
应用场景2-2 |  学习笔记
|
存储 数据建模 开发者
应用场景1 | 学习笔记
快速学习应用场景1
139 0
应用场景1  |  学习笔记
下一篇
无影云桌面