一、什么是NiFi

NiFi是美国国家安全局开发并使用了8年的可视化数据集成产品,2014年NAS将其贡献给了Apache社区,2015年成为Apache顶级项目。

官方给的解释如下:

apache nifi 支持hive mpp apache nifi 支持实时采集吗_XML


简言之:

一个基于Web图形界面,通过拖拽、连接、配置完成基于流程的编程,实现数据采集等功能的数据处理与分发系统。

说明:
Apache NiFi 是为数据流设计。它支持高度可配置的指示图的数据路由、转换和系统中介逻辑,支持从多种数据源动态拉取数据。NiFi原来是NSA的一个项目,目前已经代码开源,是Apache基金会的顶级项目之一。NiFi是基于Java的,使用Maven支持包的构建管理。 NiFi基于Web方式工作,后台在服务器上进行调度。用户可以为数据处理定义为一个流程,然后进行处理,后台具有数据处理引擎、任务调度等组件。

二、NiFi架构

apache nifi 支持hive mpp apache nifi 支持实时采集吗_HTTP_02


NiFi在主机操作系统上的JVM中执行。JVM上NiFi的主要组件如下:

1.FlowFile(信息流)

FlowFile代表每个被系统处理的数据对象。每个FlowFile由两部分组成:属性和内容。内容是数据本身,属性是与数据相关的key-value键值对,用于描述数据

2.Processor(黑盒)
FlowFile Processor 数据流处理器是nifi中真正处理工作的,例可以用来创建、发送、接受、转换、路由、分割、合并、处理 FlowFiles,数据流处理器可以接收上游的flow的attribute,以及content。数据流处理器可以处理0至多个流,并给出相应的反馈,比如提交或者回滚。Processor可以访问给定的FlowFile

3.Connection(有界缓冲区)

提供Processors之间的连接,作为Processors之间的缓冲队列。用来定义Processors之间的执行关系,并允许不同Processors之间以不同的速度进行交互

4.Process Group(子网)

一个特定集合的Processors与他们之间的连接关系形成一个ProcessGroup

6.Flow Controller(调度)
流量控制器负责管理有多少处理器的连接和管理线程以及分配资源,他作为不同处理器之间的数据流交换代理

7.Reporting Task

Reporting Task是一种后台运行的组件,可将Metrics指标、监控信息、内部NiFi状态发送到外部

8.Funnel

漏斗是一个NiFi组件,用于将来自多个连接的数据组合成单个连接。

三、NiFi的参数配置


四、有哪些处理器可用

1.数据转换

CompressContent:压缩或解压缩内容
ConvertCharacterSet:用于将一种字符编码集转换成另一种
EncryptContent:加密或解密内容
ReplaceText:使用正则表达式修改文本内容
TransformXml:将XSLT转换应用于XML内容
JoltTransformJSON:应用JOLT规范来转换JSON内容

2.路由和调解

ControlRate:限制数据流量
DetectDuplicate:根据一些用户定义的条件监视重复的FlowFiles。经常与HashContent一起使用
DistributeLoad:通过用户定义的规则,把某些数据发到特定的Relationship,实现负载均衡
MonitorActivity:在指定的时间内,没有任何数据通过流即发送通知,也可选择在数据流恢复时发送通知
RouteOnAttribute:根据FlowFile包含的属性,路由FlowFile
ScanAttribute:扫描FlowFile的属性,看是否有匹配的属性
RouteOnContent:通过FlowFile内容 路由FlowFile
ScanContent:扫描FlowFile的内容,看是否有匹配的内容
ValidateXml:针对XML模式验证XML内容; 基于用户定义的XML模式,检查FlowFile是否有效。

3.数据库访问

ConvertJSONToSQL:将JSON文档转换为SQL INSERT或UPDATE命令,然后将其传递给PutSQL处理器
ExecuteSQL:执行用户定义的SQL SELECT命令,将结果写入Avro格式的FlowFile
PutSQL:通过执行FlowFile内容定义的SQL DDM语句来更新数据库
SelectHiveQL:针对Apache Hive数据库执行用户定义的HiveQL SELECT命令,将结果以Avro或CSV格式写入FlowFile
PutHiveQL:通过执行由FlowFile的内容定义的HiveQL DDM语句来更新Hive数据库

4.属性提取

EvaluateJsonPath:用户提供JSONPath表达式(与用于XML解析/提取的XPath类似),然后根据JSON内容评估这些表达式,以替换FlowFile内容或将该值提取到用户命名的属性中。
EvaluateXPath:用户提供XPath表达式,然后根据XML内容评估这些表达式,以替换FlowFile内容,或将该值提取到用户命名的属性中。
EvaluateXQuery:用户提供XQuery查询,然后根据XML内容评估此查询,以替换FlowFile内容或将该值提取到用户命名的属性中。
ExtractText:用户提供一个或多个正则表达式,然后根据FlowFile的文本内容进行评估,然后将提取的值作为用户命名的属性添加。
HashAttribute:***对用户定义的现有属性列表的并置执行散列函数。
HashContent:***对FlowFile的内容执行散列函数,并将哈希值作为属性添加。
IdentifyMimeType:评估FlowFile的内容,以便确定FlowFile封装的文件类型。该处理器能够检测许多不同的MIME类型,例如图像,文字处理器文档,文本和压缩格式等
UpdateAttribute:更新Attribute

5.系统交互

ExecuteProcess:***运行用户定义的Operating System命令。进程的StdOut被重定向,使得写入StdOut的内容成为出站FlowFile的内容。该处理器是源处理器 - 其输出预计将生成一个新的FlowFile,并且系统调用预期不会接收输入。为了向进程提供输入,请使用ExecuteStreamCommand处理器。
ExecuteStreamCommand:***运行用户定义的Operating System命令。FlowFile的内容可选地流式传输到进程的StdIn。写入StdOut的内容成为hte出站FlowFile的内容。该处理器不能使用源处理器 - 它必须被馈送进入FlowFiles才能执行其工作。要使用源处理器执行相同类型的功能,请参阅ExecuteProcess Processor。

6.数据接入

GetFile:将文件的内容从本地磁盘(或网络连接的磁盘)流入NiFi。
GetFTP:通过FTP将远程文件的内容下载到NiFi中。
GetSFTP:通过SFTP将远程文件的内容下载到NiFi中。
GetJMSQueue:从JMS队列中下载消息,并根据JMS消息的内容创建一个FlowFile。也可以将JMS属性复制为属性。
GetJMSTopic:从JMS主题下载消息,并根据JMS消息的内容创建一个FlowFile。也可以将JMS属性复制为属性。此处理器支持持久和非持久订阅。
GetHTTP:将基于HTTP或HTTPS的远程URL的内容下载到NiFi中。处理器将记住ETag和Last-Modified Date,以确保数据不会持续摄取。
ListenHTTP:启动HTTP(或HTTPS)服务器并监听传入连接。对于任何传入的POST请求,请求的内容将作为FlowFile写出,并返回200响应码。
ListenUDP:侦听传入的UDP数据包,并为每个数据包或每包数据包创建一个FlowFile(取决于配置),并将FlowFile发送到成功关系。
GetHDFS:在HDFS中监视用户指定的目录。每当一个新的文件进入HDFS,它被复制到NiFi中。该处理器仅在主节点上运行,如果在群集中运行。为了从HDFS中复制数据并保持原样,或者从集群中的多个节点流出数据,请参阅ListHDFS处理器。
ListHDFS / FetchHDFS:ListHDFS监视HDFS中用户指定的目录,并发出一个FlowFile,其中包含遇到的每个文件的文件名。然后它通过分布式缓存通过整个NiFi集群来保持此状态。然后,这些FlowFiles可以跨群集扇出,并发送到FetchHDFS处理器,该处理器负责获取这些文件的实际内容,并发出包含从HDFS获取的内容的FlowFiles。
FetchS3Object:从Amazon Web Services(AWS)简单存储服务(S3)中获取对象的内容。出站FlowFile包含从S3接收的内容。
GetKafka:从Apache Kafka获取消息,专门用于0.8.x版本。消息可以作为每个消息的FlowFile发出,或者可以使用用户指定的分隔符进行批处理。
GetMongo:对MongoDB执行用户指定的查询,并将内容写入新的FlowFile。
GetTwitter:允许用户注册一个过滤器来收听Twitter”garden hose” 或Enterprise endpoint,为收到的每个推文创建一个FlowFile。

7.数据出口/发送数据

PutEmail:向配置的收件人发送电子邮件。FlowFile的内容可选择作为附件发送。
PutFile:将 FlowFile的内容写入本地(或网络连接)文件系统上的目录。
PutFTP:将 FlowFile的内容复制到远程FTP服务器。
PutSFTP:将 FlowFile的内容复制到远程SFTP服务器。
PutJMS:将 FlowFile的内容作为JMS消息发送到JMS代理,可选择基于属性添加JMS属性。
PutSQL:作为SQL DDL语句(INSERT,UPDATE或DELETE)执行 FlowFile的内容。FlowFile的内容必须是有效的SQL语句。可以使用属性作为参数,以便FlowFile的内容可以参数化SQL语句,以避免SQL注入攻击。
PutKafka:将一个FlowFile的内容作为消息传递给Apache Kafka,专门用于0.8.x版本。FlowFile可以作为单个消息发送,或者可以指定分隔符,例如新行,以便为单个FlowFile发送许多消息。
PutMongo:将 FlowFile的内容作为INSERT或UPDATE发送到Mongo。

8.分割和聚合

SplitText:SplitText采用单个FlowFile,其内容为文本,并根据配置的行数将其拆分为1个或更多个FlowFiles。例如,处理器可以配置为将FlowFile拆分成许多FlowFiles,每个FlowFiles只有1行。
SplitJson:允许用户将由数组或许多子对象组成的JSON对象拆分为每个JSON元素的FlowFile。
SplitXml:允许用户将XML消息拆分成许多FlowFiles,每个FlowFiles都包含原始的段。当通过“包装”元素连接几个XML元素时,通常使用这种方法。然后,该处理器允许将这些元素分割成单独的XML元素。
UnpackContent:解压缩不同类型的归档格式,如ZIP和TAR。存档中的每个文件随后作为单个FlowFile传输。
MergeContent:该处理器负责将许多FlowFiles合并到一个FlowFile中。FlowFiles可以通过将其内容与可选的页眉,页脚和分隔符连接起来,或者通过指定ZIP或TAR等存档格式来合并。FlowFiles可以根据一个共同的属性进行合并,如果被其他Splitting进程拆分,则可以进行“碎片整理”。每个bin的最小和最大大小都是基于元素数量或FlowFiles内容的总大小进行用户指定的,并且可以分配可选的超时,以便FlowFiles只会等待其指定的时间。
SegmentContent:根据一些配置的数据大小,将FlowFile分段到潜在的许多较小的FlowFiles中。拆分不是针对任何分隔符而是基于字节偏移来执行的。这是在传送FlowFiles之前使用的,以便通过并行发送许多不同的片段来提供更低的延迟。另一方面,这些FlowFiles可以由MergeContent处理器使用碎片整理模式进行重新组合。
SplitContent:将单个FlowFile拆分为潜在的许多FlowFiles,类似于SegmentContent。但是,对于SplitContent,分割不是在任意字节边界上执行,而是指定要分割内容的字符串。

9.HTTP

GetHTTP:将基于HTTP或HTTPS的远程URL的内容下载到NiFi中。处理器将记住ETag和Last-Modified Date,以确保数据不会持续摄取。
ListenHTTP:启动HTTP(或HTTPS)服务器并监听传入连接。对于任何传入的POST请求,请求的内容将作为FlowFile写出,并返回200个响应。
InvokeHTTP:执行由用户配置的HTTP请求。该处理器比GetHTTP和PostHTTP更加通用,但需要更多的配置。该处理器不能用作源处理器,并且必须具有传入的FlowFiles才能被触发以执行其任务。
PostHTTP:执行HTTP POST请求,发送FlowFile的内容作为消息的正文。这通常与ListenHTTP一起使用,以便在不能使用Site to Site的情况下(例如,当节点不能直接访问,但能够通过HTTP进行通信时)在两个不同的NiFi实例之间传输数据)。注意:HTTP可用作站点到站点运输协议除了现有的RAW Socket传输。它还支持HTTP代理。推荐使用HTTP Site to Site,因为它具有更高的可扩展性,并且可以使用输入/输出端口提供双向数据传输,具有更好的用户认证和授权。
HandleHttpRequest / HandleHttpResponse:HandleHttpRequest处理器是一个源处理器,它与ListenHTTP类似地启动嵌入式HTTP(S)服务器。但是,它不会向客户端发送响应。相反,FlowFile与HTTP请求的主体一起发送,作为其作为属性的所有典型Servlet参数,标头等的内容和属性。HandleHttpResponse可以在FlowFile处理完成后将响应发送回客户端。这些处理器总是被期望彼此结合使用,并允许用户在NiFi内直观地创建Web服务。

10.亚马逊网络服务

FetchS3Object:获取存储在Amazon Simple Storage Service(S3)中的对象的内容。然后将从S3检索的内容写入FlowFile的内容。
PutS3Object:使用配置的凭据,密钥和存储桶名称将 FlowFile的内容写入到Amazon S3对象。
PutSNS:将 FlowFile的内容作为通知发送到Amazon Simple Notification Service(SNS)。
GetSQS:从Amazon Simple Queuing Service(SQS)中提取消息,并将消息的内容写入FlowFile的内容。
PutSQS:将 FlowFile的内容作为消息发送到Amazon Simple Queuing Service(SQS)。
DeleteSQS:从亚马逊简单排队服务(SQS)中删除一条消息。这可以与GetSQS一起使用,以便从SQS接收消息,对其执行一些处理,然后只有在成功完成处理后才从队列中删除该对象。