Apache NiFi Processor实战
1 前言
Apache NiFi是什么?NiFi官网给出如下解释:“一个易用、强大、可靠的数据处理与分发系统”。通俗的来说,即Apache NiFi 是一个易于使用、功能强大而且可靠的数据处理和分发系统,其为数据流设计,它支持高度可配置的指示图的数据路由、转换和系统中介逻辑。
为了对NiFi能够表述的更为清楚,下面通过NiFi的架构来做简要介绍,如下图所示。
根据官网对各个组件的说明,做摘要翻译:
• WebServer:其目的在于提供基于HTTP的命令和控制API。
• Flow Controller:这是操作的核心,以Processor为处理单元,提供了用于运行的扩展线程,并管理扩展接收资源时的调度。
• Extensions:在其他文档中描述了各种类型的NiFi扩展,Extensions的关键在于扩展在JVM中操作和执行。
• FlowFile Repository:FlowFile库的作用是NiFi跟踪记录当前在流中处于活动状态的给定流文件的状态,其实现是可插拔的,默认的方法是位于指定磁盘分区上的一个持久的写前日志。
• Content Repository:Content库的作用是给定流文件的实际内容字节所在的位置,其实现也是可插拔的。默认的方法是一种相对简单的机制,即在文件系统中存储数据块。
• Provenance Repository:Provenance库是所有源数据存储的地方,支持可插拔。默认实现是使用一个或多个物理磁盘卷,在每个位置事件数据都是索引和可搜索的。
2 NiFi Processer介绍
上一节说了那么多,主要通过NiFi的架构图介绍了NiFi的基本概念,由概念可知Flow Controller是NiFi的核心,那么Flow Controller具体是什么?Flow Controller扮演者文件交流的处理器角色,维持着多个处理器的连接并管理各个Processer,Processer则是实际处理单元。
那么,让我们通过NiFi的UI看下NiFi的Processor包含哪些?
通过上图可知,Processor包含各种类型的组件,如amazon、attributes、hadoop等,可通过前缀进行轻易辨识,如Get、Fetch开头代表获取,如getFile、getFTP、FetchHDFS,execute代表执行,如ExecuteSQL、ExecuteProcess、ExecuteFlumeSink等均可较容易知其简单用途。
3 NiFi Processer实战
说了那么多,介绍了NiFi的架构和Processor,那么说好的实战呢?那么,本文就以笔者的一个实际需求为例,进行Processor的实战。需求如下:选取一款数据处理调度工具,对服务器脚本实现定制调度执行。其中服务器的脚本涉及到对环境变量、oracle数据库、Hadoop生态圈组件的调度。当对服务器脚本调度执行完成后返回脚本运行状态,并提供失败重运行接口。
为了实现需求,曾调度过各种调度工具,如Apache Oozie、Azkaban、Pentaho等,最终比较了各种利弊尝试选用Apache NiFi作为尝试,通过查阅NiFi Processor API,能更好的支持远程操作的Processor为ExecuteProcess。下面将对需求进行实战讲解。
3.1 Processor的添加与配置
1. 点击“Add Processor”,选择ExecuteProcess后点击Add按钮完成添加,如下图。
2. 右击ExecuteProcess后选择Configure Processor,对Properties选项卡进行配置,其中每一个配置选项均提供了相关的说明,如下图。
如上图所示,这里有必要对各选项进行相关说明。
• Command(执行命令): sh。
• Command Arguments(执行命令参数):-c;ssh user@ip sh js/job/job_hourly.sh `date
• Batch Duration(执行间隔时间):不设置。//我们需求是通过定时调度,而并非按间隔时间执行。
• Redirect Error Stream(重定位流):不设置。
• Argument Delimiter(执行命令参数分隔符):; //以;对参数进行分割。
3.2 Processor调度
NiFi支持三种调度策略,包括Time Driven(时间驱动)、CRON Driven(CRON驱动)和Event Driven(事件驱动,非可选),根据我们实际需求选择CRON Driven,个人理解CRON即是Crontab的应用,CRON的各参数含义分别代表:秒、分、时、日、月、周、年,需要配合*、?和L共同执行(*代表字段的值都有效;?代表对于指定的字段不指定值;L代表长整形)。如:“0 0 13 * * ?”代表想要在每天下午1点进行调度执行。因此根据我们的需求进行参数的调度配置。如下图所示。
3.3 运行状态监控
NiFi通过Rest API供开发者调度,这里我们用Processor API对运行状态进行监控(状态参数获取、Processor的启动与停止)。
1) 运行状态监控参数获取:
命令如下:curl ‘http://IP/nifi-api/processors/processorsID ‘得到如下结果,可通过json解析器解析并获取状态。
2) Processor的启动与停止:
NiFi的Processor启动停止通过其Put方法实现,Put最有效的作用是改变其运行状态,NiFi的Process总共有三种状态,即Running、Stopped和Disabled。
那么我们将开始和停止两个命令Rest API的放在脚本中执行即可。
• 启动命令(使用Rest API的Put方法):
curl -i -X PUT -H ‘Content-Type:application/json’ -d ‘
{
“revision”: {
“clientId”: “586ec1d7-015d-1000-6459-28251212434e”,
“version”:17},
“component”: {
“id”: “39e0dafc-015d-1000-918d-bee89ae2226e”,
“state”: “RUNNING”
}
}’ http://IP/nifi-api/processors/processorsID
• 停止命令(使用Rest API的Put方法):
curl -i -X PUT -H ‘Content-Type:application/json’ -d ‘
{
“revision”: {
“clientId”: “586ec1d7-015d-1000-6459-28251212434e”,
“version”:17},
“component”: {
“id”: “39e0dafc-015d-1000-918d-bee89ae2226e”,
“state”: “STOPPED”
}
}’ http://IP/nifi-api/processors/processorsID
4 小结与后记
本文首先对Apache NiFi进行简介,后以笔者的实际需求为例,对NiFi核心组件Processor的实战说明。由于NiFi仍然属于Apache推出时间不长的一个顶级项目,虽功能十分强大,但可查阅资源仍然有限,本文更多的是一个抛砖的过程,其真正强大的功能还在数据处理上,欢迎感兴趣的各位进行互相探讨。
新一代Java版低成本、私有化、高性能用户行为分析系统 C4J上线啦!
Cobub开源社区交流QQ群:194022996
Apache NiFi Processor实战的更多相关文章
- 【NIFI】 Apache NiFI 之 ExecuteScript处理(一)
本例介绍NiFI ExecuteScript处理器的使用,使用的脚本引擎ECMScript FlowFile I / O简介 NiFi中的流文件由两个主要组件构成,即属性和内容.属性是关于内容/流文件 ...
- 【NIFI】 开发自定义Nifi Processor
本例需要基础知识:[NIFI] Apache NiFI 安装及简单的使用 Nifi不光可以使用自带的Processor,还可以自定义Processor.本例简单介绍开发一个Processor 开发 1 ...
- 【NIFI】 Apache NiFI 使用技巧
本章介绍NIFI组件的使用. 主要有:Nginx反向代理NIFI,配置SSLContextService Nginx反向代理NIFI 使用nginx反向代理NIFI配置如下 upstream nifi ...
- 【NIFI】 Apache NiFI 安装及简单的使用
NiFI介绍 NiFi(NiagaraFiles)是为了实现系统间数据流的自动化而构建的.虽然术语“数据流”用于各种上下文,但我们在此处使用它来表示系统之间的自动和管理信息流 官网地址:http:// ...
- 【NIFI】 Apache NiFI 与 SQL 操作
本里需要基础知识:[NIFI] Apache NiFI 安装及简单的使用 查询SQL 1.拖入一个 Processor:ExecuteSQLRecord(执行sql记录) 2.配置,SETTINGS的 ...
- Apache Nifi在Windows环境下搭建伪群集及证书登录
代码地址如下:http://www.demodashi.com/demo/11986.html 前些时间做了关于Apache Nifi分布式集群的搭建分享,但很多时候要搭建分布式集群机器资源是个问题, ...
- Apache Nifi 开发
Apache NiFi是由美国过国家安全局(NSA)贡献给Apache基金会的开源项目.其设计目标是自己主动化系统间的数据流.基于其工作流式的编程理念.NiFi很易于使用,强大.可靠及高可配置. 两个 ...
- 初识Apache NiFi
一. NiFi介绍 Apache NiFi支持功能强大且可扩展的数据路由,转换和系统中介逻辑的有向图. Apache NiFi的一些高级功能和目标包括: 基于Web的用户界面 设计,控制,反馈和监控之 ...
- Apache nifi 第一篇(概述)
1.什么是Apache NiFi? 简单地说,NiFi是为了自动化系统之间的数据流.虽然数据流这种形式很容易理解,但我们在此使用它来表示系统之间的自动化和不同系统之间数据的流转.企业拥有多个系统,其中 ...
随机推荐
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 辅助类:表格单元格使用了 "bg-danger" 类
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- C#中SqlDataAdapter的使用小结---转载
C#中SqlDataAdapter的使用小结 转载 叁木-Neil 最后发布于2018-06-07 21:29:39 阅读数 8275 收藏 展开 SqlDataAdapter对象 一.特点介绍1.表 ...
- 如何使用Python输出一个[斐波那契数列]
如何使用Python输出一个[斐波那契数列]Fibonacci 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonac ...
- storm正常任务数据量过大时造成定时任务不执行的问题
在执行storm的定时任务时,发现storm普通任务数据量过大时造成定时任务不执行, 同时设置了storm的普通任务和定时任务,定时任务设置5秒执行1次. 普通任务的数据时从spout中不停发射字符串 ...
- Android 获取当前日期距离过期时间的日期差值的完整方法直接使用
/*** * 获取当前日期距离过期时间的日期差值 * @param endTime * @return */public String dateDiff(String endTime) { Strin ...
- android EditText中inputType的属性列表
android 1.5以后添加了软件虚拟键盘的功能,所以在输入提示中将会有对应的软键盘模式 android中inputType属性在EditText输入值时启动的虚拟键盘的风格有着重要的作用.这也大大 ...
- php 等于不等于 一个感叹号两个等于号
$a == $b 等于 TRUE,如果 $a 等于 $b. $a === $b 全等 TRUE,如果 $a 等于 $b,并且它们的类型也相同.(PHP 4 引进) $a != $b 不等 TRUE,如 ...
- Day9 - I - 不要62 HDU - 2089
杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer).杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍, ...
- 网络流的最大流入门(从普通算法到dinic优化)
网络流(network-flows)是一种类比水流的解决问题方法,与线性规划密切相关.网络流的理论和应用在不断发展.而我们今天要讲的就是网络流里的一种常见问题--最大流问题. 最大流问题(maximu ...
- centos 6.5安装NodeJS
centos 6.5安装NodeJS 下载 可以在本地下载node.js最新版,然后通过ftp工具上传到服务器,或者直接在服务器终端使用wget命令下载(我当时下载的是node-v7.5.0-linu ...