.
NiFi 总结
一个易用、强大、可靠的数据处理与分发系统。基于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
cd /tmp 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 ambari-server install-mpack --mpack=/tmp/hdf-ambari-mpack-3.0.1.1-5.tar.gz --verbose ambari-server restart yum install -y yum-utils createrepo yum install -y yum-plugin-priorities
七、参考文档
- Apache NiFi 概述
- Apache NiFi 用户指南
- Apache NiFi 管理指南
- Apache NiFi表达式语言指南
- Apache NiFi 开发者指南
- Apache NiFi RestAPI
- ExecuteScript使用
- NiFi监控
- Hive事务管理避坑指南
- NiFi在大数据环境下的企业数据自动化集成是这样的