第二章 Apache NiFi 入门指南

Apache NiFi 入门指南


本指南适用于谁?

本指南是为从未使用过NiFi或仅接触过NiFi或仅完成特定任务的用户编写的。本指南无意作为详尽的说明手册或参考指南。《 用户指南》提供了大量信息,旨在成为更详尽的资源,并且作为参考指南也非常有用。相比之下,本指南仅向用户提供所需的信息,以便他们了解如何使用NiFi,以便快速,轻松地构建强大而敏捷的数据流。

由于本指南中的某些信息仅适用于初次使用的用户,而其他信息则可能适用于曾经使用NiFi的用户,因此本指南分为几个不同的部分,其中某些部分可能对某些用户没有用。读者。随意跳到最适合您的部分。

本指南确实希望用户对NiFi是什么有一个基本的了解,并且不会深入研究这一详细级别。可在概述文档中找到此级别的信息 。

本指南中使用的术语

为了谈论NiFi,读者应该熟悉一些关键术语。我们将在此处较高层次地解释这些特定于NiFi的术语。

FlowFile:每条“用户数据”(即,用户带入NiFi进行处理和分发的数据)都称为FlowFile。FlowFile由两部分组成:属性和内容。内容是用户数据本身。属性是与用户数据关联的键/值对。

Processor:Processor是NiFi组件,负责创建,发送,接收,转换,路由,拆分,合并和处理FlowFiles。它是NiFi用户可用于构建其数据流的最重要的构建块。

下载并安装NiFi

在继续之前,请查看管理指南,以确认您具有安装和运行NiFi的最低系统要求。

可以从“ NiFi下载”页面下载NiFi。有两种包装选项:

更适合Linux的“ tarball”(tar.gz)
一个更适合Windows用户的zip文件

Mac OS X用户也可以使用压缩包,也可以通过从命令行终端简单运行命令通过Homebrew安装brew install nifi。

NiFi需要Java 8或11。建议先通过Homebrew安装NiFi,然后再安装其中一个Java版本。Homebrew知道NiFi依赖Java,但不依赖受支持的特定版本,因此,它可能会提示在其NiFi安装过程中提示安装不兼容的JDK。

对于未运行OS X或未安装Homebrew的用户,下载您要使用的NiFi版本后,只需将存档解压缩到您希望从中运行应用程序的位置即可。

有关如何配置NiFi实例的信息(例如,配置安全性,数据存储配置或运行NiFi的端口),请参阅《管理指南》。

启动NiFi

如上所述下载并安装NiFi后,可以使用适合您操作系统的机制来启动它。

对于Windows用户

对于Windows用户,请导航至安装NiFi的文件夹。此文件夹中有一个名为的子文件夹bin。导航到此子文件夹,然后双击run-nifi.bat文件。

这将启动NiFi并使其在前台运行。要关闭NiFi,请选择已启动的窗口,然后在按住C的同时按住Ctrl键。

对于Linux / Mac OS X用户

对于Linux和OS X用户,请使用“终端”窗口导航到安装NiFi的目录。要在前台运行NiFi,请运行bin/nifi.sh run。这将使应用程序运行,直到用户按下Ctrl-C。届时,它将启动应用程序的关闭。

要在后台运行NiFi,请运行bin/nifi.sh start。这将启动应用程序以开始运行。要检查状态并查看NiFi当前是否正在运行,请执行命令bin/nifi.sh status。通过执行命令可以关闭NiFi bin/nifi.sh stop

如果NiFi与Homebrew一起安装,请从文件系统中的任何位置nifi start或nifi stop从命令运行命令以启动或停止NiFi。

服务安装

目前,仅Linux和Mac OS X用户支持将NiFi作为服务安装。要将应用程序作为服务安装,请导航至“终端”窗口中的安装目录,然后执行命令bin/nifi.sh install 以使用默认名称安装服务nifi。要为服务指定自定义名称,请使用可选的第二个参数(即服务名称)执行命令。例如,要将NiFi作为名称安装为服务dataflow,请使用命令bin/nifi.sh install dataflow。

安装后,可以使用适当的命令(例如sudo service nifi start 和)启动和停止该服务sudo service nifi stop。另外,可以通过检查运行状态sudo service nifi status

可用的处理器

为了创建有效的数据流,用户必须了解他们可以使用哪些类型的处理器。NiFi包含许多不同的处理器。这些处理器提供以下功能:从众多不同的系统中提取数据,路由,转换,处理,拆分和聚合数据,以及将数据分发到许多系统。

在几乎每个NiFi版本中,可用的处理器数量都会增加。因此,我们不会尝试命名每个可用的处理器,但是将重点介绍一些最常用的处理器,并按其功能对它们进行分类。

数据转换

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

路由与中介

  • ControlRate:限制数据流通过一部分流的速率
  • DetectDuplicate:基于某些用户定义的条件,监视重复的FlowFiles。常与HashContent结合使用
  • DistributeLoad:通过仅将一部分数据分配给每个用户定义的关系来实现负载平衡或样本数据
  • MonitorActivity:在用户定义的时间段过后,没有任何数据通过流中的特定点时,发送通知。(可选)在数据流恢复时发送通知。
  • RouteOnAttribute:根据流文件包含的属性来路由它。
  • ScanAttribute:在FlowFile上扫描用户定义的属性集,检查是否有任何属性与用户定义的词典中找到的术语匹配。
  • RouteOnContent:搜索FlowFile的内容以查看其是否与任何用户定义的正则表达式匹配。如果是这样,则将FlowFile路由到已配置的Relationship。
  • ScanContent:在FlowFile的内容中搜索用户定义的词典中存在的术语,并根据这些术语的存在或不存在进行路由。该词典可以包含文本条目或二进制条目。
  • ValidateXml:根据XML模式验证XML内容;根据用户定义的XML模式,根据FlowFile的内容是否有效来路由FlowFile。

数据库访问

  • 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数据库

属性提取

  • EvaluateJsonPath:用户提供JSONPath表达式(类似于XPath,用于XML解析/提取),然后根据JSON内容对这些表达式进行评估,以替换FlowFile内容或将值提取到用户命名的Attribute中。
  • EvaluateXPath:用户提供XPath表达式,然后根据XML内容对这些表达式进行评估,以替换FlowFile内容或将值提取到用户命名的Attribute中。
  • EvaluateXQuery:用户提供一个XQuery查询,然后根据XML内容对该查询进行评估,以替换FlowFile内容或将该值提取到用户命名的Attribute中。
  • ExtractText:用户提供一个或多个正则表达式,然后根据FlowFile的文本内容对其进行评估,然后将提取的值添加为用户命名的属性。
  • HashAttribute:对现有属性的用户定义列表的串联执行哈希函数。
  • HashContent:对FlowFile的内容执行哈希函数,并将哈希值添加为Attribute。
  • IdentifyMimeType:评估FlowFile的内容,以确定FlowFile封装的文件类型。该处理器能够检测许多不同的MIME类型,例如图像,文字处理器文档,文本和压缩格式。
  • UpdateAttribute:向FlowFile添加或更新任意数量的用户定义属性。这对于添加静态配置的值以及使用表达式语言动态派生属性值很有用。该处理器还提供了一个“高级用户界面”,允许用户根据用户提供的规则有条件地更新属性。

系统互动

  • ExecuteProcess:运行用户定义的操作系统命令。重定向流程的StdOut,以使写入StdOut的内容成为出站FlowFile的内容。该处理器是一个源处理器-预期其输出将生成新的FlowFile,并且预期系统调用将不接收任何输入。为了向过程提供输入,请使用ExecuteStreamCommand Processor。
  • ExecuteStreamCommand:运行用户定义的操作系统命令。FlowFile的内容可以选择流式传输到流程的StdIn。写入StdOut的内容将成为出站FlowFile的内容。该处理器不能用作源处理器-必须将其输入传入的FlowFiles才能执行其工作。要与源处理器执行相同类型的功能,请参见ExecuteProcess
    Processor。

数据撷取

  • GetFile:将文件的内容从本地磁盘(或网络连接的磁盘)流式传输到NiFi中,然后删除原始文件。希望该处理器将文件从一个位置移动到另一位置,并且不得用于复制数据。
  • GetFTP:通过FTP将远程文件的内容下载到NiFi中,然后删除原始文件。希望此处理器将数据从一个位置移动到另一位置,并且不得用于复制数据。
  • GetSFTP:通过SFTP将远程文件的内容下载到NiFi中,然后删除原始文件。希望此处理器将数据从一个位置移动到另一位置,并且不得用于复制数据。
  • GetJMSQueue:从JMS队列下载消息,并根据JMS消息的内容创建FlowFile。还可以选择将JMS属性也复制为属性。
  • GetJMSTopic:从JMS主题下载消息,并根据JMS消息的内容创建FlowFile。还可以选择将JMS属性也复制为属性。该处理器支持持久订阅和非持久订阅。
  • GetHTTP:将基于远程HTTP或HTTPS的URL的内容下载到NiFi中。处理器将记住ETag和上次修改日期,以确保不会连续摄取数据。
  • ListenHTTP:启动HTTP(或HTTPS)服务器并侦听传入的连接。对于任何传入的POST请求,请求的内容将作为FlowFile写出,并返回200响应。
  • ListenUDP:侦听传入的UDP数据包,并为每个数据包或每个数据包包创建一个FlowFile(取决于配置),并将FlowFile发送为“成功”关系。
  • GetHDFS:监视HDFS中用户指定的目录。每当有新文件进入HDFS时,就会将其复制到NiFi中并从HDFS中删除。希望该处理器将文件从一个位置移动到另一位置,并且不得用于复制数据。如果该处理器在群集中运行,则还应仅在主节点上运行。为了从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的“花园软管”或企业端点,从而为收到的每个推文创建一个FlowFile。

数据出口/发送数据

  • 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。

拆分与汇总

  • SplitText:SplitText接收单个内容为文本的FlowFile,并根据配置的行数将其拆分为1个或多个FlowFile。例如,可以将处理器配置为将FlowFile拆分为多个FlowFiles,每个文件只有1行。
  • SplitJson:允许用户将由数组或许多子对象组成的JSON对象拆分为每个JSON元素到FlowFile中。
  • SplitXml:允许用户将XML消息拆分为多个FlowFile,每个FlowFiles包含原始文件的一部分。通常在将几个XML元素与“包装”元素结合在一起时使用。然后,此处理器允许将那些元素拆分为单独的XML元素。
  • UnpackContent:解压缩不同类型的存档格式,例如ZIP和TAR。然后,存档中的每个文件都将作为单个FlowFile进行传输。
  • MergeContent:此处理器负责将多个FlowFile合并到单个FlowFile中。可以通过将FlowFiles的内容与可选的页眉,页脚和分界符连接在一起,或通过指定存档格式(例如ZIP或TAR)来合并FlowFiles。FlowFiles可以基于公共属性进行装箱,如果通过其他拆分过程将它们分开,则可以对其进行“碎片整理”。每个bin的最小和最大大小由用户指定,具体取决于元素的数量或FlowFiles内容的总大小,还可以分配一个可选的Timeout,以便FlowFiles仅在特定时间内等待其bin变满多少时间。
  • SegmentContent:根据一些已配置的数据大小,将FlowFile分割为可能更小的FlowFile。不针对任何类型的分界符执行拆分,而仅基于字节偏移量执行。在传输FlowFiles之前使用它,以便通过并行发送许多不同的片段来提供较低的延迟。在另一方面,这些FlowFiles然后可以由MergeContent处理器使用碎片整理模式重新组装。
  • SplitContent:类似于SegmentContent,将单个FlowFile拆分为可能的多个FlowFile。但是,使用SplitContent时,不对任意字节边界执行拆分,而是指定了要在其上拆分内容的字节序列。

HTTP

  • GetHTTP:将基于远程HTTP或HTTPS的URL的内容下载到NiFi中。处理器将记住ETag和上次修改日期,以确保不会连续摄取数据。
  • ListenHTTP:启动HTTP(或HTTPS)服务器并侦听传入的连接。对于任何传入的POST请求,请求的内容将作为FlowFile写出,并返回200响应。
  • InvokeHTTP:执行由用户配置的HTTP请求。该处理器比GetHTTP和PostHTTP具有更多的用途,但是需要更多的配置。该处理器不能用作源处理器,并且必须具有传入的FlowFiles才能被触发执行其任务。
  • PostHTTP:执行HTTP POST请求,将FlowFile的内容作为消息的主体发送。在无法使用站点到站点的情况下(例如,当节点无法直接访问并且能够通过HTTP进行通信时),通常将它与ListenHTTP结合使用,以便在两个不同的NiFi实例之间传输数据。代理)。注意:除了现有的RAW套接字传输之外,HTTP还可作为站点到站点传输协议使用。它还支持HTTP代理。建议使用HTTP Site-to-Site,因为它具有更高的可扩展性,并且可以使用输入/输出端口提供双向数据传输,并具有更好的用户身份验证和授权。
  • HandleHttpRequest /HandleHttpResponse:HandleHttpRequest处理器是一个源处理器,它启动类似于ListenHTTP的嵌入式HTTP(S)服务器。但是,它不会向客户端发送响应。相反,将以HTTP请求的主体作为其内容和属性(所有典型Servlet参数,标头等)作为属性来发送FlowFile。然后,在FlowFile处理完毕后,HandleHttpResponse可以将响应发送回客户端。始终希望这些处理器可以相互结合使用,并允许用户在NiFi中直观地创建Web服务。这对于将前端添加到非基于Web的协议或围绕NiFi已执行的某些功能(例如数据格式转换)添加简单的Web服务特别有用。

亚马逊网络服务

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:从Amazon Simple Queuing Service(SQS)删除消息。可以将其与GetSQS结合使用,以便从SQS接收消息,对其进行一些处理,然后仅在对象成功完成处理后才从队列中删除该对象。

总结

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值