设为首页 收藏本站
查看: 1043|回复: 0

[经验分享] Apache NiFi Processor实战

[复制链接]

尚未签到

发表于 2018-11-18 09:20:55 | 显示全部楼层 |阅读模式
1 前言
  Apache NiFi是什么?NiFi官网给出如下解释:“一个易用、强大、可靠的数据处理与分发系统”。通俗的来说,即Apache NiFi 是一个易于使用、功能强大而且可靠的数据处理和分发系统,其为数据流设计,它支持高度可配置的指示图的数据路由、转换和系统中介逻辑。
  为了对NiFi能够表述的更为清楚,下面通过NiFi的架构来做简要介绍,如下图所示。
DSC0000.png

  根据官网对各个组件的说明,做摘要翻译:
  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包含哪些?
DSC0001.png

  通过上图可知,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按钮完成添加,如下图。
DSC0002.png

  2.右击ExecuteProcess后选择Configure Processor,对Properties选项卡进行配置,其中每一个配置选项均提供了相关的说明,如下图。
DSC0003.png

  如上图所示,这里有必要对各选项进行相关说明。
  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点进行调度执行。因此根据我们的需求进行参数的调度配置。如下图所示。
DSC0004.png

3.3 运行状态监控
  NiFi通过Rest API供开发者调度,这里我们用Processor API对运行状态进行监控(状态参数获取、Processor的启动与停止)。
  1.运行状态监控参数获取:
  命令如下:curl ‘http://IP/nifi-api/processors/processorsID ‘得到如下结果,可通过json解析器解析并获取状态。
DSC0005.png

  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推出时间不长的一个顶级项目,虽功能十分强大,但可查阅资源仍然有限,本文更多的是一个抛砖的过程,其真正强大的功能还在数据处理上,欢迎感兴趣的各位进行互相探讨。
  推荐大家一个开源私有化部署的用户行为分析平台Cobub Razor,项目地址:https://github.com/cobub/razor
  文/hPan  原文链接:http://www.cobub.com/actual-combat-of-apache-nifi-processor/


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-636432-1-1.html 上篇帖子: Windows上Python3.6环境django部署到Apache服务器 下篇帖子: CentOS7下Apache2.4.6使用MySQL5.7验证
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表