0 簡介
Apache NiFi是一個基于流程式設計概念的資料流系統。它支援功能強大且可伸縮的資料路由、轉換和系統中介邏輯有向圖。NiFi有一個基于web的使用者界面,用于設計、控制、回報和監視資料流。它在服務品質的幾個次元上是高度可配置的,比如容錯與保證傳遞、低延遲與高吞吐量以及基于優先級的隊列。NiFi為所有接收的、分叉的、連接配接的、克隆的、修改的、發送的和最終到達配置的最終狀态時丢棄的資料提供細粒度的資料來源。
- 安裝
線上安裝
https://nifi.apache.org/quickstart.html
離線安裝
三台叢集方式安裝
1. 安裝jdk1.8
2. 安裝zookeeper
3. 安裝nifi(使用外部zookeeper)(三台相同配置)
- 下載下傳安裝包,上傳到叢集并解壓
https://archive.apache.org/dist/nifi/
- 配置叢集。配置一台後分發,然後把本機位址全部修改為本機的
conf/nifi.properties修改端口号和路徑:
#web通路位址: nifi.web.http.host=本機位址
#web通路端口: nifi.web.http.port=18001
#路由輸入位址:nifi.remote.input.host=本機位址
#路由輸入端口:nifi.remote.input.socket.port=18002
#分布式叢集節點:nifi.cluster.is.node=true
#分布式節點位址:nifi.cluster.node.address=本機位址
#分布式節點端口:nifi.cluster.node.protocol.port=28001
#zookeeper配置:nifi.zookeeper.connect.string=zookeeper叢集 位址 al-node2:2181…
啟動nifi
/opt/module/nifi-1.8.0/bin/nifi.sh start
/opt/module/nifi-1.8.0/bin/nifi.sh stop
檢視日志
tail -F /opt/module/nifi-1.8.0/logs/nifi-app.log
等待5分鐘,通路
hadoop102:18001
二、使用(hive版本要求1.2. hive 單節點nifi也得單節點)
2.1 Web簡介
1、權限
預設情況下,沒有配置權限,是以任何人都可以檢視和修改資料流。
https://nifi.apache.org/docs/nifi-docs/html/administration-guide.html
2、界面介紹

3、區域一
這裡就是“操作畫布“,所有的對資料流的操作基本都在這個上面進行,在這上面可以進行”拖、拽、拉、連線…“等等操作,至于這幾個操作的具體作用是什麼,在後續的執行個體中會具體介紹。(從圖中可以看到畫布上面有幾個我之前建好的組)
4、區域二
這裡主要是構造資料流操作的主要面闆。
1、添加子產品(processor)
nifi内部會提供各個處理子產品,當我們在進行資料處理的過程中,可以選擇不同的子產品并調整變量進行拼裝,進而組合成一個完整的資料流處理的組。
2、添加資料流傳入點(input-port)
雖說是資料流輸入點,但是并不是整體資料流的起點。它是作為組與組之間的資料流連接配接的傳入點與輸出點。
3、添加資料流輸出點(output-port)
同理上面的輸入點。它是作為組與組之間的資料流連接配接的傳入點與輸出點。
4、添加組(process-group)
組相當于系統中的檔案夾,作用就是使資料流的各個部分看起來更工整,思路更清晰,不至于從頭到尾一條線閱讀起來十分不友善。
5、添加遠端的組(remote process-group)
根據彈出框進行資訊配置,可加入遠端的組。
6、拉取已有的檔案(template)
每當做好一個完整的資料流後,可存儲到本地為xml檔案,nifi支援本地的template上傳,這個按鈕就是在上傳本地template之後,選擇上傳過的一個擷取到操作畫布上。
7、添加便簽(label)
相當于便簽,可放置在畫布空白處,寫上備注資訊。
5、區域三
這一部分是對區域一這個畫布的縮小預覽,點選放大縮小可調整視野,藍框區域就是畫布目前的界面,可用滑鼠在這部分進行移動進而調整畫布的視野。
6、區域四
開始運作
選中子產品并點選運作按鈕,開始進行對資料流的處理。
停止運作
選中子產品并點選停止按鈕,則停止了進行對資料流的處理。
儲存template
選擇你要儲存的一個template,點選這個儲存按鈕,可把這個template儲存到nifi系統裡(并不是電腦本地,如果想儲存到電腦本地,可點選右上角這個按鈕,選擇Template,彈出的頁面上有下載下傳選項)。
上傳template
可上傳本地的template(xml檔案)到nifi系統裡。
7、案例一
導出mysql中的資料轉換為Json串并儲存在本地
1、添加executesql到面闆
(1.1)
(1.2) 配置executesql
(1.3)配置Database Connection Pooling Service
(1.4)點選 -> 配置Database Connection Pooling Service
注意:一定要将state改為Enable
2、添加ConverrtAvroToJson
(1)添加ConverrtAvroToJson到面闆,不用修改任何屬性配置。
- 添加PutFile
- 連接配接處理器
1、拖動箭頭指向下一層,并勾選success。
Success和failure都要有下一級這個子產品才能啟動
2、把failure可以自動終止掉
executeSQL自動終止failure
convertavrotoJSon終止failure
putfile終止success和failure
- 排程
NiFi支援三種排程政策,包括Time Driven(時間驅動)、CRON Driven(CRON驅動)和Event Driven(事件驅動,非可選),根據我們實際需求選擇CRON Driven,個人了解CRON即是Crontab的應用,CRON的各參數含義分别代表:秒、分、時、日、月、周、年,需要配合*、?和L共同執行(*代表字段的值都有效;?代表對于指定的字段不指定值;L代表長整形)。如:“0 0 13 * * ?”代表想要在每天下午1點進行排程執行。
1、crontab表達式
2、時間間隔排程
3.3 案例二
需求:導出Hive資料轉換為csv并儲存到HDFS
3.3.1 添加SelectHiveQL
(1)添加SelectHiveQL到面闆
(2)配置資料倉庫連接配接池
Hive-site.xml
Core-site.xml
有使用tez的話
Tez-site.xml
(3)啟動資料倉庫連接配接池
注意:此方案借助hiveserver2進行連接配接,是以要手動開啟和hiveserver2服務。
(4)添加PutHDFS處理器
Core-site.xml
Hdfs-site.xml
(5)啟動
(6)檢視HDFS生成的檔案