NiFi基本概念
概述
簡單地說,NiFi是為了自動(dòng)化系統(tǒng)之間的數(shù)據(jù)流而構(gòu)建的。雖然術(shù)語“數(shù)據(jù)流”在各種環(huán)境中使用借卧,但我們在此處使用它來表示系統(tǒng)之間自動(dòng)化和管理的信息流。這個(gè)問題空間一直存在筛峭,因?yàn)槠髽I(yè)有多個(gè)系統(tǒng)铐刘,其中一些系統(tǒng)創(chuàng)建數(shù)據(jù),一些系統(tǒng)消耗數(shù)據(jù)影晓。已經(jīng)討論并廣泛闡述了出現(xiàn)的問題和解決方案模式镰吵。企業(yè)集成模式 中提供了一個(gè)全面且易于使用的表單檩禾。
NiFi的誕生,要致力于解決的問題:
- 因?yàn)榫W(wǎng)絡(luò)故障捡遍、磁盤故障锌订、軟件崩潰、人們犯錯(cuò)導(dǎo)致的系統(tǒng)錯(cuò)誤画株。
- 數(shù)據(jù)讀寫超出了自身系統(tǒng)的處理能力。
- 獲取的數(shù)據(jù)不具有規(guī)范性啦辐。
- 數(shù)據(jù)結(jié)構(gòu)的優(yōu)先級變化很快谓传,啟用新流和更改現(xiàn)有流的速度必須非常快芹关。
- 數(shù)據(jù)結(jié)構(gòu)化管理的可移植性與不同數(shù)據(jù)格式之間的依賴性续挟。
核心概念
NiFi的基本設(shè)計(jì)概念與基于流程的編程的主要思想密切相關(guān)。以下是一些主要的NiFi概念以及它們?nèi)绾斡成涞紽BP:
NiFi 術(shù)語 | FBP 術(shù)語 | 描述 |
---|---|---|
FlowFile | Information Packet | FlowFile表示在系統(tǒng)中移動(dòng)的每個(gè)對象侥衬,對于每個(gè)對象诗祸,NiFi跟蹤鍵/值對屬性字符串的映射及其相關(guān)的零個(gè)或多個(gè)字節(jié)的內(nèi)容。 |
FlowFile Processor | Black Box | 處理器實(shí)際執(zhí)行這項(xiàng)工作轴总。在企業(yè)集成模式中直颅,處理器正在系統(tǒng)之間進(jìn)行數(shù)據(jù)路由、轉(zhuǎn)換或中介的某些組合怀樟。處理器可以訪問給定流文件及其內(nèi)容流的屬性功偿。處理器可以對給定工作單元中的零或多個(gè)流文件進(jìn)行操作,并提交該工作或回滾該工作往堡。 |
Connection | Bounded Buffer | Connections提供處理器之間的實(shí)際鏈接械荷。它們充當(dāng)隊(duì)列并允許各種進(jìn)程以不同的速率進(jìn)行交互。這些隊(duì)列可以動(dòng)態(tài)優(yōu)先化虑灰,并且可以在負(fù)載上具有上限吨瞎,從而實(shí)現(xiàn)反壓。 |
Flow Controller | Scheduler | 流控制器維護(hù)流程如何連接和管理所有流程使用的線程及其分配的知識穆咐。Flow Controller充當(dāng)促進(jìn)處理器之間FlowFiles交換的代理颤诀。 |
Process Group | subnet | Process Group 是一組特定的進(jìn)程及其連接,可以通過輸入端口接收數(shù)據(jù)并通過輸出端口發(fā)送數(shù)據(jù)庸娱。以這種方式着绊,Process Group允許僅通過組合其他組件來創(chuàng)建全新組件。 |
NiFi架構(gòu)原理
NiFi在主機(jī)操作系統(tǒng)上的JVM內(nèi)執(zhí)行熟尉。JVM上NiFi的主要組件如下:
- 1.Web Server
Web服務(wù)器的目的是托管NiFi基于HTTP的命令和控制API归露。 - 2.Flow Controller
流量控制器是操作的大腦。它為擴(kuò)展程序提供運(yùn)行的線程斤儿,并管理擴(kuò)展程序何時(shí)接收要執(zhí)行的資源的計(jì)劃剧包。 - 3.Extensions
在其他文獻(xiàn)中描述了各種類型的NiFi擴(kuò)展恐锦。這里的關(guān)鍵點(diǎn)是擴(kuò)展在JVM中運(yùn)行和執(zhí)行。 - 4.FlowFile Repository
FlowFile存儲庫是NiFi跟蹤其對流中當(dāng)前活動(dòng)的給定FlowFile的了解狀態(tài)的地方疆液。存儲庫的實(shí)現(xiàn)是可插入的一铅。默認(rèn)方法是位于指定磁盤分區(qū)上的持久性預(yù)寫日志。 - 5.Content Repository
內(nèi)容存儲庫是給定FlowFile的實(shí)際內(nèi)容字節(jié)堕油。存儲庫的實(shí)現(xiàn)是可插入的潘飘。默認(rèn)方法是一種相當(dāng)簡單的機(jī)制,它將數(shù)據(jù)塊存儲在文件系統(tǒng)中掉缺〔仿迹可以指定多個(gè)文件系統(tǒng)存儲位置,以便獲得不同的物理分區(qū)以減少任何單個(gè)卷上的爭用眶明。 - 6.Provenance Repository
Provenance Repository是存儲所有出處事件數(shù)據(jù)的地方艰毒。存儲庫構(gòu)造是可插入的,默認(rèn)實(shí)現(xiàn)是使用一個(gè)或多個(gè)物理磁盤卷搜囱。在每個(gè)位置內(nèi)丑瞧,事件數(shù)據(jù)被索引并可搜索。
NiFi運(yùn)行在集群
從NiFi 1.0版本開始蜀肘,采用了Zero-Master Clustering范例绊汹。NiFi群集中的每個(gè)節(jié)點(diǎn)對數(shù)據(jù)執(zhí)行相同的任務(wù),但每個(gè)節(jié)點(diǎn)都在不同的數(shù)據(jù)集上運(yùn)行幌缝。
Apache ZooKeeper選擇單個(gè)節(jié)點(diǎn)作為集群協(xié)調(diào)器灸促,ZooKeeper自動(dòng)處理故障轉(zhuǎn)移。
所有群集節(jié)點(diǎn)都會(huì)向群集協(xié)調(diào)器報(bào)告心跳和狀態(tài)信息涵卵。群集協(xié)調(diào)器負(fù)責(zé)斷開和連接節(jié)點(diǎn)浴栽。此外,每個(gè)群集都有一個(gè)主節(jié)點(diǎn)轿偎,也由ZooKeeper選舉典鸡。作為DataFlow管理器,您可以通過任何節(jié)點(diǎn)的用戶界面(UI)與NiFi群集進(jìn)行交互坏晦。您所做的任何更改都將復(fù)制到群集中的所有節(jié)點(diǎn)萝玷,從而允許多個(gè)入口點(diǎn)。
1.對于IO
可以預(yù)期的吞吐量或延遲會(huì)有很大差異昆婿,具體取決于系統(tǒng)的配置方式球碉。鑒于大多數(shù)主要NiFi子系統(tǒng)都有可插拔的方法,性能取決于實(shí)施仓蛆。
但是睁冬,對于具體且廣泛適用的內(nèi)容,請考慮開箱即用的默認(rèn)實(shí)現(xiàn)看疙。
這些都是持久的保證交付豆拨,并使用本地磁盤這樣做直奋。因此保守一點(diǎn),假設(shè)典型服務(wù)器中的適度磁盤或RAID卷大約每秒50 MB讀/寫速率施禾。
然后脚线,對于大類數(shù)據(jù)流的NiFi應(yīng)該能夠有效地達(dá)到每秒100 MB或更高的吞吐量。這是因?yàn)轭A(yù)期每個(gè)物理分區(qū)和添加到NiFi的內(nèi)容存儲庫都會(huì)出現(xiàn)線性增長弥搞。
這將在FlowFile存儲庫和originance存儲庫的某個(gè)點(diǎn)上出現(xiàn)瓶頸邮绿。我們計(jì)劃提供一個(gè)基準(zhǔn)測試和性能測試模板,以包含在構(gòu)建中拓巧,允許用戶輕松測試他們的系統(tǒng)并確定瓶頸在哪里斯碌,以及他們可能成為一個(gè)因素。此模板還應(yīng)使系統(tǒng)管理員可以輕松進(jìn)行更改并驗(yàn)證其影響肛度。
2.對于CPU
流控制器充當(dāng)引擎,指示特定處理器何時(shí)被賦予執(zhí)行線程投慈。編寫處理器以在執(zhí)行任務(wù)后立即返回線程承耿。可以為Flow Controller提供一個(gè)配置值伪煤,指示它維護(hù)的各個(gè)線程池的可用線程加袋。
理想的線程數(shù)取決于主機(jī)系統(tǒng)資源的核心數(shù)量,系統(tǒng)是否正在運(yùn)行其他服務(wù)抱既,以及流程中處理的性質(zhì)职烧。對于典型的IO大流量,可以使許多線程可用防泵。
3.對于RAM
NiFi存在于JVM中蚀之,因此僅限于JVM提供的內(nèi)存空間。JVM垃圾收集成為限制總實(shí)際堆大小以及優(yōu)化應(yīng)用程序運(yùn)行時(shí)間的一個(gè)非常重要的因素捷泞。定期閱讀相同內(nèi)容時(shí)足删,NiFi作業(yè)可能是I / O密集型的。配置足夠大的磁盤以優(yōu)化性能锁右。
NiFi安裝
NiFi安裝地址
1.NiFi官網(wǎng)地址
http://nifi.apache.org/
2.文檔查看地址
http://nifi.apache.org/docs.html
3.下載地址
http://nifi.apache.org/download.html
安裝NiFi
NiFi安裝
(1)把nifi-1.8.0-bin.tar.gz上傳到linux的/opt/software目錄下
(2)解壓nifi-1.8.0-bin.tar.gz到/opt/module/目錄下面
[atguigu@hadoop102 software]$ tar -zxvf nifi-1.8.0-bin.tar.gz -C /opt/module/
(3)修改apache-NiFi-sources-0.8.4的名稱為NiFi
[atguigu@hadoop102 module]$ mv nifi-1.8.0/ nifi
NiFi核心配置
(1)編輯/etc/security/limits.conf來增加NiFi打開大量的文件數(shù)量和線程數(shù)量的限制失受。
[atguigu@hadoop102 module]$ vim /etc/security/limits.conf
* hard nofile 50000
* soft nofile 50000
* hard nproc 10000
* soft nproc 10000
[atguigu@hadoop102 module]$ vim /etc/security/limits.d/90-nproc.conf
* soft nproc 10000
(2)增加可用的TCP套接字端口數(shù)
[atguigu@hadoop102 module]$ sudo sysctl -w net.ipv4.ip_local_port_range="10000 65000"
[atguigu@hadoop102 module]$ vim /etc/sysctl.conf
vm.swappiness = 0
(3)修改默認(rèn)端口(可選)
[atguigu@hadoop102 module]$ vim /opt/module/nifi/conf/nifi.properties
提示:更多屬性配置可以參考如下:http://nifi.apache.org/docs.html
啟動(dòng)
(1)NiFi后臺啟動(dòng)/關(guān)閉命令
[atguigu@hadoop102 nifi]$ bin/nifi.sh start
[atguigu@hadoop102 nifi]$ bin/nifi.sh stop
[atguigu@hadoop102 nifi]$ bin/nifi.sh status
(2)NiFi前臺啟動(dòng)/關(guān)閉命令
[atguigu@hadoop102 nifi]$ bin/nifi.sh run #Ctrl+c 關(guān)閉
(3)web訪問
安裝NiFi服務(wù)作為系統(tǒng)服務(wù)(可選)
(1)安裝系統(tǒng)服務(wù)。
[atguigu@hadoop102 nifi]$ bin/nifi.sh install
(2)服務(wù)常用啟動(dòng)/關(guān)閉命令
[atguigu@hadoop102 nifi]$ sudo service nifi start
[atguigu@hadoop102 nifi]$ sudo service nifi stop
[atguigu@hadoop102 nifi]$ sudo service nifi status
NiFi 的使用
Web頁面簡介
- 1.NiFi登陸后界面
- 2.NiFi登陸界面解讀
- 3.全局菜單
- 4.NiFi登陸界面解讀
我們現(xiàn)在可以通過在畫布中添加Processor來開始創(chuàng)建數(shù)據(jù)流咏瑟。要執(zhí)行此操作拂到,請將處理器圖標(biāo)(
)從屏幕左上方拖動(dòng)到畫布中間(圖紙類背景)并將其放在那里。這將為我們提供一個(gè)對話框码泞,允許我們選擇要添加的處理器:
提示:各個(gè)處理器的用途及配置在官網(wǎng)上都有介紹兄旬,大約提供了近300個(gè)常用處理器。包含但不限于:數(shù)據(jù)格式轉(zhuǎn)換浦夷、數(shù)據(jù)采集辖试、數(shù)據(jù)(local/kafka/solr/hdfs/hbase/mysql/hive/http等)的讀寫等功能辜王,使用方便,如果不能滿足需求罐孝,還可以自定義處理器呐馆。
5.配置處理器(以GetFile為例)
提示:詳細(xì)properties配置可參考官網(wǎng):http://nifi.apache.org/docs.html
5.連接處理器(將文件轉(zhuǎn)換為csv格式)
案例一
添加ExecuteSQL
(1)添加ExecuteSQL到面板
(2)配置ExecuteSQL
(3)點(diǎn)擊 -> 配置Database Connection Pooling Service
注意:一定要將state改為Enable
添加ConverrtAvroToJson
添加ConverrtAvroToJson到面板,不用修改任何屬性配置莲兢。
添加PutFile
(1)添加PutFile到面板
連接處理器
(1)拖動(dòng)箭頭指向下一層汹来,并勾選success。
(2)啟動(dòng)任務(wù)改艇,選擇對應(yīng)處理器收班,點(diǎn)擊啟動(dòng)按鈕
案例二
需求:導(dǎo)出Hive數(shù)據(jù)轉(zhuǎn)換為csv并保存到HDFS
添加SelectHiveQL
(1)添加SelectHiveQL到面板
(2)配置數(shù)據(jù)倉庫連接池
(3)啟動(dòng)數(shù)據(jù)倉庫連接池
注意:此方案借助hiveserver2進(jìn)行連接,因此要手動(dòng)開啟和hiveserver2服務(wù)谒兄。
(4)添加PutHDFS處理器
(5)啟動(dòng)
(6)查看HDFS生成的文件
常見錯(cuò)誤
1.每一個(gè)開始處理器都要有指定任務(wù)失敗時(shí)的處理方式
2.每一個(gè)結(jié)束處理器都要有指定任務(wù)失敗/成功的處理方式