Apache NiFi简介

原文链接: https://docs.cloudera.com/HDPDocuments/HDF3/HDF-3.0.1.1/bk_overview/content/ch_overview-flow-management.html

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

一、什么是NiFi?

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

传统的数据流解决方案往往会遇到以下挑战:

  • 网络错误
  • 硬盘错误
  • 软件崩溃
  • 人为错误
  • 数据生产能力超过消费能力
  • 对现有数据流进行增加、修改需要的操作太复杂

二、NiFi的特性

1. 可视化控制

NiFi提供一个可视化的数据流展现与编辑,使得用户处理数据流更加直观。在数据流上做出修改时,这个更改将立即在时机生产中产生作用。 用户进行局部修改时,不需要停止整个流处理过程。

2. 保证交付

3. 数据背压

NiFi提供队列缓存,当生产速度大于消费速度时。能提供数据背压能力

4.高扩展性

5.优先级队列

NiFi允许设置一个或多个优先级方案。默认为先进先出策略,也可以设置为后进先出、最老的数据先出、最新的数据先出

6.流式QoS保障

经常有一些数据是非常重要且不能丢失的,需要低延迟处理,NiFi能够为这些数据流提供QoS保障。

7.数据跟踪

NiFi自动记录对数据流的每一次操作

8.记录、恢复 历史数据

NiFi提供数据追踪记录功能,用户能够对中间过程的内容进行下载和回放。

9.模板

很多数据流模式,是可以复用的。NiFi允许用户发布设计模板并共享给其他人

10.安全性

系统间,NiFi可以通过双向SSL进行数据加密

三、NiFi 组件

1.FlowFile

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

2.Processor

Processor可以用来创建、发送、接受、转换、路由、分割、合并、处理 FlowFiles。Processor可以访问给定的FlowFile

3.Connection

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

4.Process Group

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

6.Controller Service

7.Reporting Task

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

8.Funnel

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

四、系统架构

1.WebServer 提供NiFiWeb界面 和 RestAPI

 

五、有哪些处理器可用

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接收消息,对其执行一些处理,然后只有在成功完成处理后才从队列中删除该对象。

 

六、安装HDF

 
  1. 1

  2. 2

  3. 3

  4. 4

  5. 5

  6. 6

  7. 7

 
  1. cd /tmp

  2. wget http://public-repo-1.hortonworks.com/HDF/centos7/3.x/updates/3.0.1.1/tars/hdf_ambari_mp/hdf-ambari-mpack-3.0.1.1-5.tar.gz

  3. ambari-server install-mpack --mpack=/tmp/hdf-ambari-mpack-3.0.1.1-5.tar.gz --verbose

  4. ambari-server restart

  5.  
  6. yum install -y yum-utils createrepo

  7. yum install -y yum-plugin-priorities

七、参考文档

  1. Apache NiFi 概述

  2. Apache NiFi 用户指南

  3. Apache NiFi 管理指南

  4. Apache NiFi表达式语言指南

  5. Apache NiFi 开发者指南

  6. Apache NiFi RestAPI

  7. ExecuteScript使用

  8. NiFi监控

  9. Hive事务管理避坑指南

  10. NiFi在大数据环境下的企业数据自动化集成是这样的

你可能感兴趣的:(kettle技术)