大數(shù)據(jù)干貨:Apache NiFi介紹及使用體驗(yàn)

當(dāng)我們決定把產(chǎn)品定位在企業(yè)市場時(shí),因?yàn)槠髽I(yè)的數(shù)據(jù)的多元化,數(shù)據(jù)經(jīng)過整合后接入分析平臺是很必要的。傳統(tǒng)的辦法是使用ETL來完成,而實(shí)際上我們期望這樣的過程更加的平滑、可視,而且能跟hadoop生態(tài)圈,以及層出不窮的存儲分析組件能對接起來。當(dāng)看到Hortonworks的DataPlatform組件后,類似的產(chǎn)品概念更加清晰起來。Hortonworks是用NiFi做的,我們希望這樣的數(shù)據(jù)傳送平臺,讓我們從數(shù)據(jù)流動(dòng)的維度,編排數(shù)據(jù)的處理過程,這種接近“萬能”的工具就是工作流引擎。我們通過對NiFi從多個(gè)維度進(jìn)行評價(jià),以期在項(xiàng)目和產(chǎn)品中合理使用,提高數(shù)據(jù)轉(zhuǎn)送的效率。

Apache NiFi 是一個(gè)web項(xiàng)目,安裝部署好后,打開如上圖的頁面??梢酝ㄟ^拖拽的方式設(shè)置操作及節(jié)點(diǎn)和流程。

操作類型主要是Processor,NiFI提供的Processor有上百個(gè),也支持自己封裝新的Processor。Processor可以分為兩大類

具體的功能性的Processor,比如putHDFS、ExecuteSQL、ConvertCSVToAvro

通用的Processor,可以在里面支持第三方的操作,比如ExecuteScript、ExecuteProcess

通過拖拽Processor,把操作拼接起來成為一個(gè)workflow。

下面是一個(gè)把PostgreSQL中一個(gè)表的數(shù)據(jù)導(dǎo)出到Apache HAWQ的過程。數(shù)據(jù)需要在HDFS緩存后,再load進(jìn)HAWQ。

復(fù)雜的workflow可以保存成模板,以便以后復(fù)用。也可以封裝Processor,Processor的開發(fā)基于maven進(jìn)行,開發(fā)完成后放入NiFi的目錄即可使用。

NiFi主要的特性有

Web-based user interface

Seamless experience between design, control, feedback, and monitoring

Highly configurable

Loss tolerant vs guaranteed delivery

Low latency vs high throughput

Dynamic prioritization

Flow can be modified at runtime

Back pressure

Data Provenance

Track dataflow from beginning to end

Designed for extension

Build your own processors and more

Enables rapid development and effective testing

Secure

SSL, SSH, HTTPS, encrypted content, etc...

Multi-tenant authorization and internal authorization/policy management

基于這些特性,我們主要從我們認(rèn)為的產(chǎn)品生態(tài)方面,結(jié)合對Apache HAWQ的數(shù)據(jù)導(dǎo)入,對NiFi做了評估。

數(shù)據(jù)源的支持功能

ETL的功能

性能

實(shí)際項(xiàng)目中的使用場景

功能的擴(kuò)展

離線文件導(dǎo)入數(shù)據(jù)庫

以NiFi將文件寫入HDFS然后執(zhí)行SQL使用pxf插件進(jìn)行數(shù)據(jù)導(dǎo)入。測試時(shí)在處理超過2GB的文件時(shí)會發(fā)生SQL執(zhí)行超時(shí)報(bào)錯(cuò),需要通過將文件進(jìn)行預(yù)分割進(jìn)行處理。

從數(shù)據(jù)庫導(dǎo)入數(shù)據(jù)

通過NiFi將源數(shù)據(jù)庫數(shù)據(jù)導(dǎo)出為avro格式并寫入HDFS,然后使用HAWQ的pxf插件進(jìn)行導(dǎo)入。源表過大時(shí)NiFi會發(fā)生棧空間不足,處理能力約在單表5000萬條記錄左右。

聚合等預(yù)處理的支持

NiFi自身沒有對聚合計(jì)算提供processor,但可以通過自定義processor或調(diào)用腳本進(jìn)行處理。

錯(cuò)誤處理

沒有健全的容錯(cuò)處理和重試機(jī)制。以Apache HAWQ的場景為例,所有數(shù)據(jù)導(dǎo)入都是通過外部表掛載,然后insert into table select * 的方式進(jìn)行導(dǎo)入的,并且每個(gè)流程只能對單張表進(jìn)行數(shù)據(jù)操作。在發(fā)生數(shù)據(jù)類型不匹配等錯(cuò)誤時(shí),當(dāng)前處理的所有數(shù)據(jù)都會被丟棄,并且ExecuteSQL這個(gè)processor會留下報(bào)錯(cuò)的log。需要通過后續(xù)的更新配置進(jìn)行重試。

NiFi的Cluster

NiFi支持cluster的方式并行執(zhí)行workflow。無需配置主從,節(jié)點(diǎn)會自動(dòng)進(jìn)行選舉。web頁面訪問任意節(jié)點(diǎn)均可,Dashboard會在所有節(jié)點(diǎn)間同步。使用資源可以監(jiān)控,包括每個(gè)節(jié)點(diǎn)的uptime,queue資源,系統(tǒng)cpu信息,jvm信息,磁盤使用狀況。但是只能進(jìn)行監(jiān)控不能進(jìn)行調(diào)度,能夠操作的只有將某個(gè)節(jié)點(diǎn)從cluster中斷開。cluster模式下對于一些調(diào)用了本地文件的操作,比如getfile和puthdfs,需要所有節(jié)點(diǎn)在相同位置有同樣的文件,否則processor無法運(yùn)行。

第三方庫的使用

NiFi是個(gè)運(yùn)行框架,功能可以擴(kuò)展。

分兩種情況:

1)執(zhí)行腳本,可以通過ExecuteScript直接對FLowFile進(jìn)行處理,支持Clojure、Groovy、lua、python、ruby

2)直接調(diào)用服務(wù)器上的可執(zhí)行文件,通過ExecuteProcess即可。

與Kettle協(xié)作

NiFi對ETL的支持非常有限,有一個(gè)美好的想法是用專業(yè)的ETL工具跟NiFi這種流轉(zhuǎn)引擎協(xié)作使用。遺憾的是NiFi無法與Kettle直接結(jié)合使用,但是可以通過預(yù)先編寫好Kettle的ktr轉(zhuǎn)換文件,然后通過processor進(jìn)行調(diào)用。

使用場景

1)在我們工業(yè)大數(shù)據(jù)平臺項(xiàng)目中,NiFi可以做到整體替代Flume的作用,并且配置上較Flume相對更為簡單,讀取文件后可以直接將文件作為kafka的message發(fā)送。此外在替代Streaming組件直接進(jìn)行數(shù)據(jù)文件解析并存入數(shù)據(jù)庫這方面,理論上是可行的,但是處理能力有待驗(yàn)證,并且上述文件采集的具體性能也需要進(jìn)行大量文件的實(shí)際驗(yàn)證。

2)在我們的金融數(shù)據(jù)倉庫中,試用了兩種更新策略,一是本地更新時(shí)同時(shí)保存一份增量csv數(shù)據(jù)文件,然后以離線數(shù)據(jù)文件方式導(dǎo)入;二是以增量表方式更新,原有數(shù)據(jù)庫更新時(shí)的增量表不進(jìn)行即時(shí)刪除,而是待HAWQ同步完成后再行刪除,使用NiFi是可以完成的。

UI的改造開發(fā)

NiFi的界面有些編程風(fēng)格,需要有工程師習(xí)慣的人才好接受。是作為項(xiàng)目交付中的一個(gè)工具,還是作為一個(gè)開放的可配置的工作臺,對交互的要求是不一樣的。官方文檔里提及了可以制作自定義UI,如果想改造,需要不少的二次開發(fā)的工作。

關(guān)于NiFI的使用案例

NiFi雖然是Apache的頂級項(xiàng)目了,實(shí)際用的人不多。在NiFi的官網(wǎng)上,給出了一些使用NiFi的公司,數(shù)量還比較少,也不是以案例分享的方式。另外在Github上,NiFi活躍度還不夠。

總體來說,Apache NiFi是一個(gè)讓人耳目一新的數(shù)據(jù)平臺工具,在實(shí)際項(xiàng)目中,可以從數(shù)據(jù)流動(dòng)的視圖來定義開發(fā)流程。由于在實(shí)時(shí)處理和容錯(cuò)可靠性上有些不確定,目前判斷適合在中小型項(xiàng)目中使用。我們會在后續(xù)的工作中,加深對NiFi的使用場景的理解。

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

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

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