Apache NiFi 簡介

好記憶不如爛筆頭,能記下點東西,就記下點,有時間拿出來看看,也會發覺不一樣的感受.

NiFi 總結

一個易用、強大、可靠的數據處理與分發系統。基於Web圖形界面,通過拖拽、連接、配置完成基於流程的編程,實現數據採集等功能

一、什麼是NiFi?

NiFi是美國國家安全局開發並使用了8年的可視化數據集成產品,2014年NAS將其貢獻給了Apache社區,2015年成爲Apache頂級項目

傳統的數據流解決方案往往會遇到以下挑戰:

  • 網絡錯誤
  • 硬盤錯誤
  • 軟件崩潰
  • 人爲錯誤
  • 數據生產能力超過消費能力
  • 對現有數據流進行增加、修改需要的操作太複雜

二、NiFi的特性

1. 可視化控制

      NiFi提供一個可視化的數據流展現與編輯,使得用戶處理數據流更加直觀。在數據流上做出修改時,這個更改將立即在時機生產中產生作用。 用戶進行局部修改時,不需要停止整個流處理過程。

2. 保證交付

3. 數據背壓

     NiFi提供隊列緩存,當生產速度大於消費速度時。能提供數據背壓能力

4.高擴展性

      可以基於自己的邏輯實現自己的處理器

5.優先級隊列

     NiFi允許設置一個或多個優先級方案。默認爲先進先出策略,也可以設置爲後進先出、最老的數據先出、最新的數據先出

6.流式QoS保障

     經常有一些數據是非常重要且不能丟失的,需要低延遲處理,NiFi能夠爲這些數據流提供QoS保障。

7.數據跟蹤

     NiFi自動記錄對數據流的每一次操作

8.記錄、恢復 歷史數據

     NiFi提供數據追蹤記錄功能,用戶能夠對中間過程的內容進行下載和回放。

9.模板

    很多數據流模式,是可以複用的。NiFi允許用戶發佈設計模板並共享給其他人

10.安全性

    系統間,NiFi可以通過雙向SSL進行數據加密

三、NiFi 組件

1.FlowFile

FlowFile代表每個被系統處理的數據對象。每個FlowFile由兩部分組成:屬性和內容。內容是數據本身,屬性是與數據相關的key-value鍵值對,用於描述數據

2.Processor

Processor可以用來創建、發送、接受、轉換、路由、分割、合併、處理 FlowFiles。Processor可以訪問給定的FlowFile

3.Connection

 提供Processors之間的連接,作爲Processors之間的緩衝隊列。用來定義Processors之間的執行關係,並允許不同Processors之間以不同的速度進行交互

4.Process Group

 一個特定集合的Processors與他們之間的連接關係形成一個ProcessGroup

6.Controller Service

7.Reporting Task

Reporting Task是一種後臺運行的組件,可將Metrics指標、監控信息、內部NiFi狀態發送到外部

8.Funnel

漏斗是一個NiFi組件,用於將來自多個連接的數據組合成單個連接。

四、系統架構

1.WebServer 提供NiFiWeb界面 和 RestAPI

 

五、有哪些處理器可用

1.數據轉換

  • CompressContent:壓縮或解壓縮內容
  • ConvertCharacterSet:用於將一種字符編碼集轉換成另一種
  • EncryptContent:加密或解密內容
  • ReplaceText:使用正則表達式修改文本內容
  • TransformXml:將XSLT轉換應用於XML內容
  • JoltTransformJSON:應用JOLT規範來轉換JSON內容

2.路由和調解

  • ControlRate:限制數據流量
  • DetectDuplicate:根據一些用戶定義的條件監視重複的FlowFiles。經常與HashContent一起使用
  • DistributeLoad:通過用戶定義的規則,把某些數據發到特定的Relationship,實現負載均衡
  • MonitorActivity:在指定的時間內,沒有任何數據通過流即發送通知,也可選擇在數據流恢復時發送通知
  • RouteOnAttribute:根據FlowFile包含的屬性,路由FlowFile
  • ScanAttribute:掃描FlowFile的屬性,看是否有匹配的屬性
  • RouteOnContent:通過FlowFile內容 路由FlowFile
  • ScanContent:掃描FlowFile的內容,看是否有匹配的內容
  • ValidateXml:針對XML模式驗證XML內容; 基於用戶定義的XML模式,檢查FlowFile是否有效。

3.數據庫訪問

  • ConvertJSONToSQL:將JSON文檔轉換爲SQL INSERT或UPDATE命令,然後將其傳遞給PutSQL處理器
  • ExecuteSQL:執行用戶定義的SQL SELECT命令,將結果寫入Avro格式的FlowFile
  • PutSQL:通過執行FlowFile內容定義的SQL DDM語句來更新數據庫
  • SelectHiveQL:針對Apache Hive數據庫執行用戶定義的HiveQL SELECT命令,將結果以Avro或CSV格式寫入FlowFile
  • PutHiveQL:通過執行由FlowFile的內容定義的HiveQL DDM語句來更新Hive數據庫

4.屬性提取

  • EvaluateJsonPath:用戶提供JSONPath表達式(與用於XML解析/提取的XPath類似),然後根據JSON內容評估這些表達式,以替換FlowFile內容或將該值提取到用戶命名的屬性中。
  • EvaluateXPath:用戶提供XPath表達式,然後根據XML內容評估這些表達式,以替換FlowFile內容,或將該值提取到用戶命名的屬性中。
  • EvaluateXQuery:用戶提供XQuery查詢,然後根據XML內容評估此查詢,以替換FlowFile內容或將該值提取到用戶命名的屬性中。
  • ExtractText:用戶提供一個或多個正則表達式,然後根據FlowFile的文本內容進行評估,然後將提取的值作爲用戶命名的屬性添加。
  • HashAttribute:***對用戶定義的現有屬性列表的並置執行散列函數。
  • HashContent:***對FlowFile的內容執行散列函數,並將哈希值作爲屬性添加。
  • IdentifyMimeType:評估FlowFile的內容,以便確定FlowFile封裝的文件類型。該處理器能夠檢測許多不同的MIME類型,例如圖像,文字處理器文檔,文本和壓縮格式等
  • UpdateAttribute:更新Attribute

5.系統交互

  • ExecuteProcess:***運行用戶定義的Operating System命令。進程的StdOut被重定向,使得寫入StdOut的內容成爲出站FlowFile的內容。該處理器是源處理器 - 其輸出預計將生成一個新的FlowFile,並且系統調用預期不會接收輸入。爲了向進程提供輸入,請使用ExecuteStreamCommand處理器。
  • ExecuteStreamCommand:***運行用戶定義的Operating System命令。FlowFile的內容可選地流式傳輸到進程的StdIn。寫入StdOut的內容成爲hte出站FlowFile的內容。該處理器不能使用源處理器 - 它必須被饋送進入FlowFiles才能執行其工作。要使用源處理器執行相同類型的功能,請參閱ExecuteProcess Processor。

6.數據接入

  • GetFile:將文件的內容從本地磁盤(或網絡連接的磁盤)流入NiFi。
  • GetFTP:通過FTP將遠程文件的內容下載到NiFi中。
  • GetSFTP:通過SFTP將遠程文件的內容下載到NiFi中。
  • GetJMSQueue:從JMS隊列中下載消息,並根據JMS消息的內容創建一個FlowFile。也可以將JMS屬性複製爲屬性。
  • GetJMSTopic:從JMS主題下載消息,並根據JMS消息的內容創建一個FlowFile。也可以將JMS屬性複製爲屬性。此處理器支持持久和非持久訂閱。
  • GetHTTP:將基於HTTP或HTTPS的遠程URL的內容下載到NiFi中。處理器將記住ETag和Last-Modified Date,以確保數據不會持續攝取。
  • ListenHTTP:啓動HTTP(或HTTPS)服務器並監聽傳入連接。對於任何傳入的POST請求,請求的內容將作爲FlowFile寫出,並返回200響應碼。
  • ListenUDP:偵聽傳入的UDP數據包,併爲每個數據包或每包數據包創建一個FlowFile(取決於配置),並將FlowFile發送到成功關係。
  • GetHDFS:在HDFS中監視用戶指定的目錄。每當一個新的文件進入HDFS,它被複制到NiFi中。該處理器僅在主節點上運行,如果在羣集中運行。爲了從HDFS中複製數據並保持原樣,或者從集羣中的多個節點流出數據,請參閱ListHDFS處理器。
  • ListHDFS / FetchHDFS:ListHDFS監視HDFS中用戶指定的目錄,併發出一個FlowFile,其中包含遇到的每個文件的文件名。然後它通過分佈式緩存通過整個NiFi集羣來保持此狀態。然後,這些FlowFiles可以跨羣集扇出,併發送到FetchHDFS處理器,該處理器負責獲取這些文件的實際內容,併發出包含從HDFS獲取的內容的FlowFiles。
  • FetchS3Object:從Amazon Web Services(AWS)簡單存儲服務(S3)中獲取對象的內容。出站FlowFile包含從S3接收的內容。
  • GetKafka:從Apache Kafka獲取消息,專門用於0.8.x版本。消息可以作爲每個消息的FlowFile發出,或者可以使用用戶指定的分隔符進行批處理。
  • GetMongo:對MongoDB執行用戶指定的查詢,並將內容寫入新的FlowFile。
  • GetTwitter:允許用戶註冊一個過濾器來收聽Twitter”garden hose” 或Enterprise endpoint,爲收到的每個推文創建一個FlowFile。

7.數據出口/發送數據

  • PutEmail:向配置的收件人發送電子郵件。FlowFile的內容可選擇作爲附件發送。
  • PutFile:將 FlowFile的內容寫入本地(或網絡連接)文件系統上的目錄。
  • PutFTP:將 FlowFile的內容複製到遠程FTP服務器。
  • PutSFTP:將 FlowFile的內容複製到遠程SFTP服務器。
  • PutJMS:將 FlowFile的內容作爲JMS消息發送到JMS代理,可選擇基於屬性添加JMS屬性。
  • PutSQL:作爲SQL DDL語句(INSERT,UPDATE或DELETE)執行 FlowFile的內容。FlowFile的內容必須是有效的SQL語句。可以使用屬性作爲參數,以便FlowFile的內容可以參數化SQL語句,以避免SQL注入攻擊。
  • PutKafka:將一個FlowFile的內容作爲消息傳遞給Apache Kafka,專門用於0.8.x版本。FlowFile可以作爲單個消息發送,或者可以指定分隔符,例如新行,以便爲單個FlowFile發送許多消息。
  • PutMongo:將 FlowFile的內容作爲INSERT或UPDATE發送到Mongo。

8.分割和聚合

  • SplitText:SplitText採用單個FlowFile,其內容爲文本,並根據配置的行數將其拆分爲1個或更多個FlowFiles。例如,處理器可以配置爲將FlowFile拆分成許多FlowFiles,每個FlowFiles只有1行。
  • SplitJson:允許用戶將由數組或許多子對象組成的JSON對象拆分爲每個JSON元素的FlowFile。
  • SplitXml:允許用戶將XML消息拆分成許多FlowFiles,每個FlowFiles都包含原始的段。當通過“包裝”元素連接幾個XML元素時,通常使用這種方法。然後,該處理器允許將這些元素分割成單獨的XML元素。
  • UnpackContent:解壓縮不同類型的歸檔格式,如ZIP和TAR。存檔中的每個文件隨後作爲單個FlowFile傳輸。
  • MergeContent:該處理器負責將許多FlowFiles合併到一個FlowFile中。FlowFiles可以通過將其內容與可選的頁眉,頁腳和分隔符連接起來,或者通過指定ZIP或TAR等存檔格式來合併。FlowFiles可以根據一個共同的屬性進行合併,如果被其他Splitting進程拆分,則可以進行“碎片整理”。每個bin的最小和最大大小都是基於元素數量或FlowFiles內容的總大小進行用戶指定的,並且可以分配可選的超時,以便FlowFiles只會等待其指定的時間。
  • SegmentContent:根據一些配置的數據大小,將FlowFile分段到潛在的許多較小的FlowFiles中。拆分不是針對任何分隔符而是基於字節偏移來執行的。這是在傳送FlowFiles之前使用的,以便通過並行發送許多不同的片段來提供更低的延遲。另一方面,這些FlowFiles可以由MergeContent處理器使用碎片整理模式進行重新組合。
  • SplitContent:將單個FlowFile拆分爲潛在的許多FlowFiles,類似於SegmentContent。但是,對於SplitContent,分割不是在任意字節邊界上執行,而是指定要分割內容的字符串。

9.HTTP

  • GetHTTP:將基於HTTP或HTTPS的遠程URL的內容下載到NiFi中。處理器將記住ETag和Last-Modified Date,以確保數據不會持續攝取。
  • ListenHTTP:啓動HTTP(或HTTPS)服務器並監聽傳入連接。對於任何傳入的POST請求,請求的內容將作爲FlowFile寫出,並返回200個響應。
  • InvokeHTTP:執行由用戶配置的HTTP請求。該處理器比GetHTTP和PostHTTP更加通用,但需要更多的配置。該處理器不能用作源處理器,並且必須具有傳入的FlowFiles才能被觸發以執行其任務。
  • PostHTTP:執行HTTP POST請求,發送FlowFile的內容作爲消息的正文。這通常與ListenHTTP一起使用,以便在不能使用Site to Site的情況下(例如,當節點不能直接訪問,但能夠通過HTTP進行通信時)在兩個不同的NiFi實例之間傳輸數據)。注意:HTTP可用作站點到站點運輸協議除了現有的RAW Socket傳輸。它還支持HTTP代理。推薦使用HTTP Site to Site,因爲它具有更高的可擴展性,並且可以使用輸入/輸出端口提供雙向數據傳輸,具有更好的用戶認證和授權。
  • HandleHttpRequest / HandleHttpResponse:HandleHttpRequest處理器是一個源處理器,它與ListenHTTP類似地啓動嵌入式HTTP(S)服務器。但是,它不會向客戶端發送響應。相反,FlowFile與HTTP請求的主體一起發送,作爲其作爲屬性的所有典型Servlet參數,標頭等的內容和屬性。HandleHttpResponse可以在FlowFile處理完成後將響應發送回客戶端。這些處理器總是被期望彼此結合使用,並允許用戶在NiFi內直觀地創建Web服務。

10.亞馬遜網絡服務

  • FetchS3Object:獲取存儲在Amazon Simple Storage Service(S3)中的對象的內容。然後將從S3檢索的內容寫入FlowFile的內容。
  • PutS3Object:使用配置的憑據,密鑰和存儲桶名稱將 FlowFile的內容寫入到Amazon S3對象。
  • PutSNS:將 FlowFile的內容作爲通知發送到Amazon Simple Notification Service(SNS)。
  • GetSQS:從Amazon Simple Queuing Service(SQS)中提取消息,並將消息的內容寫入FlowFile的內容。
  • PutSQS:將 FlowFile的內容作爲消息發送到Amazon Simple Queuing Service(SQS)。
  • DeleteSQS:從亞馬遜簡單排隊服務(SQS)中刪除一條消息。這可以與GetSQS一起使用,以便從SQS接收消息,對其執行一些處理,然後只有在成功完成處理後才從隊列中刪除該對象。

 

六、安裝HDF

 


 

 
  1. cd /tmp

  2. wget http://public-repo-1.hortonworks.com/HDF/centos7/3.x/updates/3.0.1.1/tars/hdf_ambari_mp/hdf-ambari-mpack-3.0.1.1-5.tar.gz

  3. ambari-server install-mpack --mpack=/tmp/hdf-ambari-mpack-3.0.1.1-5.tar.gz --verbose

  4. ambari-server restart

  5.  
  6. yum install -y yum-utils createrepo

  7. yum install -y yum-plugin-priorities

七、參考文檔

  1. Apache NiFi 概述

  2. Apache NiFi 用戶指南

  3. Apache NiFi 管理指南

  4. Apache NiFi表達式語言指南

  5. Apache NiFi 開發者指南

  6. Apache NiFi RestAPI

  7. ExecuteScript使用

  8. NiFi監控

  9. Hive事務管理避坑指南

  10. NiFi在大數據環境下的企業數據自動化集成是這樣的

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章