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


<<:  Day-5 注解与断行

>>:  Day20 - 轻前端 Vue - 复杂型别 object + object collection

[D21] 物件侦测(2)

经过上一篇物件侦测(1)的介绍,我们终於可以正式进入更完整的影像侦测小世界了! 之前说过物件侦测有的...

JavaScript. 浅拷贝与深拷贝

前阵子刚写完 JavaScript,差不多可以开始进行 Vue 的时候,突然想起在 Vue 开发的时...

Day30 Open-Match 使用与参赛心得

很开心能够完成 30天的 Open-Match 文章分享,其实中间有些东西,是我一边研究一边写出来的...

人脸辨识-day25 Overfitting、Underfitting

在处理完资料集後,将资料放入模型训练时,会将资料集分为训练集、验证集和测试集,训练集是模型会对训练集...

Day 6 - Rancher 系统管理指南 - 使用者登入管理

本文将於赛後同步刊登於笔者部落格 有兴趣学习更多 Kubernetes/DevOps/Linux 相...