NiFi基本概念
概述
簡單地說,NiFi是為了自動化系統(tǒng)之間的數(shù)據(jù)流而構(gòu)建的。雖然術(shù)語“數(shù)據(jù)流”在各種環(huán)境中使用,但我們在此處使用它來表示系統(tǒng)之間自動化和管理的信息流。這個問題空間一直存在,因?yàn)槠髽I(yè)有多個系統(tǒng),其中一些系統(tǒng)創(chuàng)建數(shù)據(jù),一些系統(tǒng)消耗數(shù)據(jù)。已經(jīng)討論并廣泛闡述了出現(xiàn)的問題和解決方案模式。企業(yè)集成模式 中提供了一個全面且易于使用的表單。
NiFi的誕生,要致力于解決的問題:
- 因?yàn)榫W(wǎng)絡(luò)故障、磁盤故障、軟件崩潰、人們犯錯導(dǎo)致的系統(tǒng)錯誤。
- 數(shù)據(jù)讀寫超出了自身系統(tǒng)的處理能力。
- 獲取的數(shù)據(jù)不具有規(guī)范性。
- 數(shù)據(jù)結(jié)構(gòu)的優(yōu)先級變化很快,啟用新流和更改現(xiàn)有流的速度必須非??臁?/li>
- 數(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)中移動的每個對象,對于每個對象,NiFi跟蹤鍵/值對屬性字符串的映射及其相關(guān)的零個或多個字節(jié)的內(nèi)容。 |
| FlowFile Processor | Black Box | 處理器實(shí)際執(zhí)行這項(xiàng)工作。在企業(yè)集成模式中,處理器正在系統(tǒng)之間進(jìn)行數(shù)據(jù)路由、轉(zhuǎn)換或中介的某些組合。處理器可以訪問給定流文件及其內(nèi)容流的屬性。處理器可以對給定工作單元中的零或多個流文件進(jìn)行操作,并提交該工作或回滾該工作。 |
| Connection | Bounded Buffer | Connections提供處理器之間的實(shí)際鏈接。它們充當(dāng)隊(duì)列并允許各種進(jìn)程以不同的速率進(jìn)行交互。這些隊(duì)列可以動態(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ò)展程序何時接收要執(zhí)行的資源的計(jì)劃。 - 3.Extensions
在其他文獻(xiàn)中描述了各種類型的NiFi擴(kuò)展。這里的關(guān)鍵點(diǎn)是擴(kuò)展在JVM中運(yùn)行和執(zhí)行。 - 4.FlowFile Repository
FlowFile存儲庫是NiFi跟蹤其對流中當(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)中??梢灾付ǘ鄠€文件系統(tǒng)存儲位置,以便獲得不同的物理分區(qū)以減少任何單個卷上的爭用。 - 6.Provenance Repository
Provenance Repository是存儲所有出處事件數(shù)據(jù)的地方。存儲庫構(gòu)造是可插入的,默認(rèn)實(shí)現(xiàn)是使用一個或多個物理磁盤卷。在每個位置內(nèi),事件數(shù)據(jù)被索引并可搜索。
NiFi運(yùn)行在集群

從NiFi 1.0版本開始,采用了Zero-Master Clustering范例。NiFi群集中的每個節(jié)點(diǎn)對數(shù)據(jù)執(zhí)行相同的任務(wù),但每個節(jié)點(diǎn)都在不同的數(shù)據(jù)集上運(yùn)行。
Apache ZooKeeper選擇單個節(jié)點(diǎn)作為集群協(xié)調(diào)器,ZooKeeper自動處理故障轉(zhuǎn)移。
所有群集節(jié)點(diǎn)都會向群集協(xié)調(diào)器報(bào)告心跳和狀態(tài)信息。群集協(xié)調(diào)器負(fù)責(zé)斷開和連接節(jié)點(diǎn)。此外,每個群集都有一個主節(jié)點(diǎn),也由ZooKeeper選舉。作為DataFlow管理器,您可以通過任何節(jié)點(diǎn)的用戶界面(UI)與NiFi群集進(jìn)行交互。您所做的任何更改都將復(fù)制到群集中的所有節(jié)點(diǎn),從而允許多個入口點(diǎn)。
1.對于IO
可以預(yù)期的吞吐量或延遲會有很大差異,具體取決于系統(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ù)期每個物理分區(qū)和添加到NiFi的內(nèi)容存儲庫都會出現(xiàn)線性增長。
這將在FlowFile存儲庫和originance存儲庫的某個點(diǎn)上出現(xiàn)瓶頸。我們計(jì)劃提供一個基準(zhǔn)測試和性能測試模板,以包含在構(gòu)建中,允許用戶輕松測試他們的系統(tǒng)并確定瓶頸在哪里,以及他們可能成為一個因素。此模板還應(yīng)使系統(tǒng)管理員可以輕松進(jìn)行更改并驗(yàn)證其影響。
2.對于CPU
流控制器充當(dāng)引擎,指示特定處理器何時被賦予執(zhí)行線程。編寫處理器以在執(zhí)行任務(wù)后立即返回線程??梢詾镕low Controller提供一個配置值,指示它維護(hù)的各個線程池的可用線程。
理想的線程數(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)行時間的一個非常重要的因素。定期閱讀相同內(nèi)容時,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
啟動
(1)NiFi后臺啟動/關(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前臺啟動/關(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ù)常用啟動/關(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)(

)從屏幕左上方拖動到畫布中間(圖紙類背景)并將其放在那里。這將為我們提供一個對話框,允許我們選擇要添加的處理器:

提示:各個處理器的用途及配置在官網(wǎng)上都有介紹,大約提供了近300個常用處理器。包含但不限于:數(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)拖動箭頭指向下一層,并勾選success。



(2)啟動任務(wù),選擇對應(yīng)處理器,點(diǎn)擊啟動按鈕

案例二
需求:導(dǎo)出Hive數(shù)據(jù)轉(zhuǎn)換為csv并保存到HDFS
添加SelectHiveQL
(1)添加SelectHiveQL到面板

(2)配置數(shù)據(jù)倉庫連接池

(3)啟動數(shù)據(jù)倉庫連接池

注意:此方案借助hiveserver2進(jìn)行連接,因此要手動開啟和hiveserver2服務(wù)。
(4)添加PutHDFS處理器

(5)啟動

(6)查看HDFS生成的文件

常見錯誤
1.每一個開始處理器都要有指定任務(wù)失敗時的處理方式


2.每一個結(jié)束處理器都要有指定任務(wù)失敗/成功的處理方式

