Nifi入門(mén)

NiFi基本概念

概述

簡(jiǎn)單地說(shuō),NiFi是為了自動(dòng)化系統(tǒng)之間的數(shù)據(jù)流而構(gòu)建的。雖然術(shù)語(yǔ)“數(shù)據(jù)流”在各種環(huán)境中使用,但我們?cè)诖颂幨褂盟鼇?lái)表示系統(tǒng)之間自動(dòng)化和管理的信息流。這個(gè)問(wèn)題空間一直存在,因?yàn)槠髽I(yè)有多個(gè)系統(tǒng),其中一些系統(tǒng)創(chuàng)建數(shù)據(jù),一些系統(tǒng)消耗數(shù)據(jù)。已經(jīng)討論并廣泛闡述了出現(xiàn)的問(wèn)題和解決方案模式。企業(yè)集成模式 中提供了一個(gè)全面且易于使用的表單。
NiFi的誕生,要致力于解決的問(wèn)題:

  1. 因?yàn)榫W(wǎng)絡(luò)故障、磁盤(pán)故障、軟件崩潰、人們犯錯(cuò)導(dǎo)致的系統(tǒng)錯(cuò)誤。
  2. 數(shù)據(jù)讀寫(xiě)超出了自身系統(tǒng)的處理能力。
  3. 獲取的數(shù)據(jù)不具有規(guī)范性。
  4. 數(shù)據(jù)結(jié)構(gòu)的優(yōu)先級(jí)變化很快,啟用新流和更改現(xiàn)有流的速度必須非???。
  5. 數(shù)據(jù)結(jié)構(gòu)化管理的可移植性與不同數(shù)據(jù)格式之間的依賴(lài)性。

核心概念

NiFi的基本設(shè)計(jì)概念與基于流程的編程的主要思想密切相關(guān)。以下是一些主要的NiFi概念以及它們?nèi)绾斡成涞紽BP:

NiFi 術(shù)語(yǔ) FBP 術(shù)語(yǔ) 描述
FlowFile Information Packet FlowFile表示在系統(tǒng)中移動(dòng)的每個(gè)對(duì)象,對(duì)于每個(gè)對(duì)象,NiFi跟蹤鍵/值對(duì)屬性字符串的映射及其相關(guān)的零個(gè)或多個(gè)字節(jié)的內(nèi)容。
FlowFile Processor Black Box 處理器實(shí)際執(zhí)行這項(xiàng)工作。在企業(yè)集成模式中,處理器正在系統(tǒng)之間進(jìn)行數(shù)據(jù)路由、轉(zhuǎn)換或中介的某些組合。處理器可以訪(fǎng)問(wèn)給定流文件及其內(nèi)容流的屬性。處理器可以對(duì)給定工作單元中的零或多個(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ù)流程如何連接和管理所有流程使用的線(xiàn)程及其分配的知識(shí)。Flow Controller充當(dāng)促進(jìn)處理器之間FlowFiles交換的代理。
Process Group subnet Process Group 是一組特定的進(jìn)程及其連接,可以通過(guò)輸入端口接收數(shù)據(jù)并通過(guò)輸出端口發(fā)送數(shù)據(jù)。以這種方式,Process Group允許僅通過(guò)組合其他組件來(lái)創(chuàng)建全新組件。

NiFi架構(gòu)原理

image.png

NiFi在主機(jī)操作系統(tǒng)上的JVM內(nèi)執(zhí)行。JVM上NiFi的主要組件如下:

  • 1.Web Server
    Web服務(wù)器的目的是托管NiFi基于HTTP的命令和控制API。
  • 2.Flow Controller
    流量控制器是操作的大腦。它為擴(kuò)展程序提供運(yùn)行的線(xiàn)程,并管理擴(kuò)展程序何時(shí)接收要執(zhí)行的資源的計(jì)劃。
  • 3.Extensions
    在其他文獻(xiàn)中描述了各種類(lèi)型的NiFi擴(kuò)展。這里的關(guān)鍵點(diǎn)是擴(kuò)展在JVM中運(yùn)行和執(zhí)行。
  • 4.FlowFile Repository
    FlowFile存儲(chǔ)庫(kù)是NiFi跟蹤其對(duì)流中當(dāng)前活動(dòng)的給定FlowFile的了解狀態(tài)的地方。存儲(chǔ)庫(kù)的實(shí)現(xiàn)是可插入的。默認(rèn)方法是位于指定磁盤(pán)分區(qū)上的持久性預(yù)寫(xiě)日志。
  • 5.Content Repository
    內(nèi)容存儲(chǔ)庫(kù)是給定FlowFile的實(shí)際內(nèi)容字節(jié)。存儲(chǔ)庫(kù)的實(shí)現(xiàn)是可插入的。默認(rèn)方法是一種相當(dāng)簡(jiǎn)單的機(jī)制,它將數(shù)據(jù)塊存儲(chǔ)在文件系統(tǒng)中??梢灾付ǘ鄠€(gè)文件系統(tǒng)存儲(chǔ)位置,以便獲得不同的物理分區(qū)以減少任何單個(gè)卷上的爭(zhēng)用。
  • 6.Provenance Repository
    Provenance Repository是存儲(chǔ)所有出處事件數(shù)據(jù)的地方。存儲(chǔ)庫(kù)構(gòu)造是可插入的,默認(rèn)實(shí)現(xiàn)是使用一個(gè)或多個(gè)物理磁盤(pán)卷。在每個(gè)位置內(nèi),事件數(shù)據(jù)被索引并可搜索。

NiFi運(yùn)行在集群

image.png

從NiFi 1.0版本開(kāi)始,采用了Zero-Master Clustering范例。NiFi群集中的每個(gè)節(jié)點(diǎn)對(duì)數(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é)斷開(kāi)和連接節(jié)點(diǎn)。此外,每個(gè)群集都有一個(gè)主節(jié)點(diǎn),也由ZooKeeper選舉。作為DataFlow管理器,您可以通過(guò)任何節(jié)點(diǎn)的用戶(hù)界面(UI)與NiFi群集進(jìn)行交互。您所做的任何更改都將復(fù)制到群集中的所有節(jié)點(diǎn),從而允許多個(gè)入口點(diǎn)。

1.對(duì)于IO
可以預(yù)期的吞吐量或延遲會(huì)有很大差異,具體取決于系統(tǒng)的配置方式。鑒于大多數(shù)主要NiFi子系統(tǒng)都有可插拔的方法,性能取決于實(shí)施。

但是,對(duì)于具體且廣泛適用的內(nèi)容,請(qǐng)考慮開(kāi)箱即用的默認(rèn)實(shí)現(xiàn)。
這些都是持久的保證交付,并使用本地磁盤(pán)這樣做。因此保守一點(diǎn),假設(shè)典型服務(wù)器中的適度磁盤(pán)或RAID卷大約每秒50 MB讀/寫(xiě)速率。

然后,對(duì)于大類(lèi)數(shù)據(jù)流的NiFi應(yīng)該能夠有效地達(dá)到每秒100 MB或更高的吞吐量。這是因?yàn)轭A(yù)期每個(gè)物理分區(qū)和添加到NiFi的內(nèi)容存儲(chǔ)庫(kù)都會(huì)出現(xiàn)線(xiàn)性增長(zhǎng)。

這將在FlowFile存儲(chǔ)庫(kù)和originance存儲(chǔ)庫(kù)的某個(gè)點(diǎn)上出現(xiàn)瓶頸。我們計(jì)劃提供一個(gè)基準(zhǔn)測(cè)試和性能測(cè)試模板,以包含在構(gòu)建中,允許用戶(hù)輕松測(cè)試他們的系統(tǒng)并確定瓶頸在哪里,以及他們可能成為一個(gè)因素。此模板還應(yīng)使系統(tǒng)管理員可以輕松進(jìn)行更改并驗(yàn)證其影響。

2.對(duì)于CPU
流控制器充當(dāng)引擎,指示特定處理器何時(shí)被賦予執(zhí)行線(xiàn)程。編寫(xiě)處理器以在執(zhí)行任務(wù)后立即返回線(xiàn)程。可以為Flow Controller提供一個(gè)配置值,指示它維護(hù)的各個(gè)線(xiàn)程池的可用線(xiàn)程。

理想的線(xiàn)程數(shù)取決于主機(jī)系統(tǒng)資源的核心數(shù)量,系統(tǒng)是否正在運(yùn)行其他服務(wù),以及流程中處理的性質(zhì)。對(duì)于典型的IO大流量,可以使許多線(xiàn)程可用。

3.對(duì)于RAM
NiFi存在于JVM中,因此僅限于JVM提供的內(nèi)存空間。JVM垃圾收集成為限制總實(shí)際堆大小以及優(yōu)化應(yīng)用程序運(yùn)行時(shí)間的一個(gè)非常重要的因素。定期閱讀相同內(nèi)容時(shí),NiFi作業(yè)可能是I / O密集型的。配置足夠大的磁盤(pán)以?xún)?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

image.png

安裝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的名稱(chēng)為NiFi

[atguigu@hadoop102 module]$ mv nifi-1.8.0/ nifi

NiFi核心配置

(1)編輯/etc/security/limits.conf來(lái)增加NiFi打開(kāi)大量的文件數(shù)量和線(xiàn)程數(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
image.png

提示:更多屬性配置可以參考如下:http://nifi.apache.org/docs.html

啟動(dòng)

(1)NiFi后臺(tái)啟動(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前臺(tái)啟動(dòng)/關(guān)閉命令

[atguigu@hadoop102 nifi]$ bin/nifi.sh run #Ctrl+c 關(guān)閉

(3)web訪(fǎng)問(wèn)

http://hadoop102:8080/nifi

安裝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頁(yè)面簡(jiǎn)介

  • 1.NiFi登陸后界面
image.png
  • 2.NiFi登陸界面解讀
image.png
  • 3.全局菜單
image.png
  • 4.NiFi登陸界面解讀

我們現(xiàn)在可以通過(guò)在畫(huà)布中添加Processor來(lái)開(kāi)始創(chuàng)建數(shù)據(jù)流。要執(zhí)行此操作,請(qǐng)將處理器圖標(biāo)(


image.png

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

image.png

提示:各個(gè)處理器的用途及配置在官網(wǎng)上都有介紹,大約提供了近300個(gè)常用處理器。包含但不限于:數(shù)據(jù)格式轉(zhuǎn)換、數(shù)據(jù)采集、數(shù)據(jù)(local/kafka/solr/hdfs/hbase/mysql/hive/http等)的讀寫(xiě)等功能,使用方便,如果不能滿(mǎn)足需求,還可以自定義處理器。

5.配置處理器(以GetFile為例)

image.png
image.png
image.png
image.png

提示:詳細(xì)properties配置可參考官網(wǎng):http://nifi.apache.org/docs.html

image.png

5.連接處理器(將文件轉(zhuǎn)換為csv格式)

image.png

案例一

添加ExecuteSQL

(1)添加ExecuteSQL到面板

image.png

(2)配置ExecuteSQL

image.png

(3)點(diǎn)擊 -> 配置Database Connection Pooling Service

image.png

注意:一定要將state改為Enable

image.png
image.png

添加ConverrtAvroToJson

添加ConverrtAvroToJson到面板,不用修改任何屬性配置。

添加PutFile

(1)添加PutFile到面板

image.png

連接處理器

(1)拖動(dòng)箭頭指向下一層,并勾選success。

image.png
image.png
image.png

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

image.png

案例二

需求:導(dǎo)出Hive數(shù)據(jù)轉(zhuǎn)換為csv并保存到HDFS

添加SelectHiveQL

(1)添加SelectHiveQL到面板

image.png

(2)配置數(shù)據(jù)倉(cāng)庫(kù)連接池

image.png

(3)啟動(dòng)數(shù)據(jù)倉(cāng)庫(kù)連接池

image.png

注意:此方案借助hiveserver2進(jìn)行連接,因此要手動(dòng)開(kāi)啟和hiveserver2服務(wù)。

(4)添加PutHDFS處理器

image.png

(5)啟動(dòng)

image.png

(6)查看HDFS生成的文件

image.png

常見(jiàn)錯(cuò)誤

1.每一個(gè)開(kāi)始處理器都要有指定任務(wù)失敗時(shí)的處理方式

image.png
image.png

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

image.png
image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • NiFi采用了Zero-Master聚類(lèi)模式。集群中的每個(gè)節(jié)點(diǎn)都對(duì)數(shù)據(jù)執(zhí)行相同的任務(wù),但是每個(gè)節(jié)點(diǎn)都使用不同的數(shù)據(jù)...
    我的小南瓜閱讀 2,568評(píng)論 0 3
  • feisky云計(jì)算、虛擬化與Linux技術(shù)筆記posts - 1014, comments - 298, trac...
    不排版閱讀 4,383評(píng)論 0 5
  • 不知道最近是怎么了,微信讀書(shū)和簡(jiǎn)書(shū)上關(guān)于花唄的文章甚囂塵上,普遍是:別和用花唄的人談戀愛(ài)、別和用花唄的人做朋友、遠(yuǎn)...
    滌高閱讀 1,290評(píng)論 14 25
  • 《寂靜的歡喜》 葉芝,“20世紀(jì)最偉大的英語(yǔ)詩(shī)人”,你一定會(huì)在某個(gè)時(shí)刻,遇見(jiàn)這個(gè)語(yǔ)言和幻想的天才。 好久不曾評(píng)過(guò)什...
    艽艽艽艽閱讀 231評(píng)論 4 3
  • 上小學(xué)啦!孩子們又走上了一個(gè)新的成長(zhǎng)旅程! 東莞市松山湖莞美學(xué)校,美麗幽靜又充滿(mǎn)了文明書(shū)香的搖籃,孩子們將從這里起...
    周資源閱讀 1,172評(píng)論 0 4

友情鏈接更多精彩內(nèi)容