iT邦幫忙

2021 iThome 鐵人賽

DAY 5
0
AI & Data

Apache NiFi - 讓你輕鬆設計 Data Pipeline系列 第 5

Day5 NiFi - FlowFiles

還記得系列文的一開始,有先向各位讀者介紹在 NiFi 中重要的幾個 Componenet,那時候還只有概念文字的說明,現在我們已經建立起服務在自己本機上了,而在接下來的幾天我會再針對每一個 Component 作進一步地操作,同時也會帶一些操作來讓讀者對於這些名詞可以更印象深刻。

何謂 FlowFiles?

在一開始我們就有稍微點到 FlowFiles 的意思,這裡在貼上來讓大家回溫一下:

我們可以想像是資料中或是File中的一筆Record,甚至是一包資料同時含有很多筆 record,
今天假設有一張 Table且其中有100筆資料時,
當 NiFi 從中讀取時,這100筆 Record 就會在 NiFi 產生100筆 FlowFiles,
而 FlowFiles 會帶有自己的 attribute 和 content。

在套用一個比較熟悉的舉例,可以把『FlowFiles』類似於『網路封包』。網路封包一定會有既定的 metadata, 像是發送時間、header等資訊,這些對應到的就是 FlowFiles 的 Attributes; 而網路封包也會帶著真實的資料內容,可能加密也有可能不加密,而這對應到的就是 FlowFiles 的 content。

上面是一個很概要的說明,其實 FlowFiles 還有幾個重要的特性:

  1. 可用來確定資料的本體以及在 Pipeline的流向。
  2. 在前一個所產生的資訊 (Attributes 和 Content),會跟著 FlowFiles 流到下一個 Processor。
  3. 正因為有第2點的特性,所以可比較在經過 Processor 的前後轉換狀態,以利於確認資料是否符合預期的轉換和後續Debug。
  4. FlowFile 會被寫入到 Disk,也就是我們一開始提到的 FlowFile repository,用來幫助我們做後續的資料追蹤。

Example

這裡給大家呈現一個應用,就會更加理解。我們先從 Kaggle - Titanic - Machine Learning from Disaster 下載一份資料集,其中有一個 train.csv,共有 891 筆資料,像透過 NiFi 將資料讀出來,會產生什麼樣的狀況呢?先看一下下面的 git 檔:

先建立一個簡單的小 Pipeline,共有 4 個 Processor:

  1. ListFile: 回傳某一個 Folder 下的所有 File
  2. FetchFile: 取得 File 的資訊與資料內容
  3. SplitRecord: 切分每一筆資料為單一個 FlowFiles
  4. Wait: 中斷點的 Processor

下一篇會有更詳細地介紹這些 Processor 說明,這邊就不特別提太多。

這裡在呈現剛剛 gif 檔的靜態圖:

可以看到在 FetchFile 的時候他是 output 一個 FlowFile,因為他是讀取檔案,這時候他會把檔案全部的資料塞成同一個 FlowFile; 但下一步的時候,SplitRecord 就會把裡面的資料一筆一筆切出來各個 FlowFiles,所以就會看到有 891 筆 FlowFiles。

這邊就能印證出 FlowFile 他可以是一包資料(File) 或是每一筆File 中的 records。而下游任務就可以藉此接受到每一筆資料做處理。

FlowFile Attributes & Content

前面我們已經知道 FlowFiles 是如何產生出來,以及在 NiFi 的呈現狀況如何。但我一直都有提到的還有一件事情,就是 『Attributes』和 『Content』,這部分要如何在 NiFi 看到呢?一樣先來看 gif 檔:

可以從上面的操作可以看到如何呈現『Attributes』和 『Content』,如果太快我這邊我在細講一下。

  1. 當我們點擊 List QueueView data provenance 的時候可以看到每一個 FlowFile,而當我們點選最左邊的 i,就可以看到每一筆 FlowFile 的詳細資訊:

  2. 點選進來後,就可以看到 FlowFile 的 Details,其中在右下角可以看到有 DownloadView 的按鈕,可以看到或下載目前這個 FlowFile 的真實資料內容

  3. 假如我們點選 View,就可以看到如下的資料內容,最右手邊也會呈現內容是什麼格式,像是csv, json 等

  4. 然而,我們回到第2步驟,若點選ATTRIBUTES,就可以看到所有關於這個 FlowFile 的 metadata,而這些 key 就會跟著 FlowFile 流到下游的 Processor,所以在下一個 Processor 也會看到同樣的 Attributes,而我們也可以針對這些 key 來做一些操作,在未來的場景應用時就會帶大家做一次。

小總結

有了這些操作的簡單小範例,我相信讀者們對於 NiFi FlowFile 的概念有更近一步地認識了,那未來我們在其他操作和應用時提到 FlowFile 的時候,你也可以立即反應它的概念與原因。最後,今天大家已經看到 Processor 出現了,所以想當然而明天就是要來介紹『Processor』啦,敬請期待一下。

Reference


上一篇
Day4 讓我們來 Build 出自己的 NiFi 服務吧
下一篇
Day6 NiFi - Processors
系列文
Apache NiFi - 讓你輕鬆設計 Data Pipeline30

尚未有邦友留言

立即登入留言