Nifi入門

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的誕生,要致力于解決的問題:

  1. 因?yàn)榫W(wǎng)絡(luò)故障、磁盤故障、軟件崩潰、人們犯錯導(dǎo)致的系統(tǒng)錯誤。
  2. 數(shù)據(jù)讀寫超出了自身系統(tǒng)的處理能力。
  3. 獲取的數(shù)據(jù)不具有規(guī)范性。
  4. 數(shù)據(jù)結(jié)構(gòu)的優(yōu)先級變化很快,啟用新流和更改現(xiàn)有流的速度必須非??臁?/li>
  5. 數(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)原理

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)行的線程,并管理擴(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)行在集群

image.png

從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

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的名稱為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
image.png

提示:更多屬性配置可以參考如下: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訪問

http://hadoop102:8080/nifi

安裝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登陸后界面
image.png
  • 2.NiFi登陸界面解讀
image.png
  • 3.全局菜單
image.png
  • 4.NiFi登陸界面解讀

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


image.png

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

image.png

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

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)拖動箭頭指向下一層,并勾選success。

image.png
image.png
image.png

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

image.png

案例二

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

添加SelectHiveQL

(1)添加SelectHiveQL到面板

image.png

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

image.png

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

image.png

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

(4)添加PutHDFS處理器

image.png

(5)啟動

image.png

(6)查看HDFS生成的文件

image.png

常見錯誤

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

image.png
image.png

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

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

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

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

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