【筆記】M1 安裝 NiFi 的一些小坑

Jacky Fu
8 min readSep 25, 2021

--

Apache NiFi Logo

An easy to use, powerful, and reliable system to process and distribute data.

前言

一直沒有機會好好認識Apache NiFi 這套工具,趁最近做專案的空檔,把NiFi 載下來把玩了幾天,有機會的話會再寫一篇我是如何將 NiFi 應用在我的 Side Project 上的。話說回頭,剛開始接觸 NiFi 的前幾天,我甚至都沒法成功運行它,說來慚愧,網路上有太多的教學文章,我就一步一步跟著操作,然後邁向失敗(?),最後還是回過頭來乖乖閱讀 NiFi 官方提供的教學文件,這才讓我成功 Lunch NiFi Web UI 並且可以登入使用。(補充一點: 筆者使用的裝置是 2020 M1 Macbook Air,蘋果全新的 Arm64 架構坑很深啊)

關於 Apache NiFi

細心的讀者,點進來時應該就已經注意到這行英文字 An easy to use, powerful, and reliable system to process and distribute data. 這是在官網左上角(視覺最顯眼的地方),來自官方簡潔有力的一句話說明。大致上的概念,是提供一個可靠且易懂的操作介面,讓開發者們可以專注於建構資料流程本身。其中 NiFi 強大的特性還包含了 Web-based user interface(使用者介面)、Highly configurable(個人化配置)、Data Provenance(資料源)、Designed for extension(可擴充)、Secure(安全性)等面向,這在官網首頁有更詳細的描述,不再多說。

另外,非常推薦閱讀一下這篇文章,文中針對 NiFi 做了更多的描述,講述 FBP (Flow-Based Programming) 概念同時解釋了 NiFi 核心的幾個關鍵字 FlowFile、FlowFile Processor、Connection、Flow Controller、Process Group,對於筆者入門 NiFi 很有幫助,新來的同學不妨看看。

安裝 NiFi

筆者嘗試了官方提供的兩種安裝方法。

方法一透過 Docker 運行 NiFi ,只能說簡潔有力,很快就 run 起來了,相當推薦有 Docker 的朋友們使用方法一。不過這中間其實也有踩雷,筆者是在舊版 Intel x86 的主機成功運行的,而 M1 主機雖也可以運行 Docker,但 NiFi Docker Image 始終無法正常運作,也許我們得再給 Arm64 架構一些時間解決不同架構環境導致的問題,若是有成功的朋友,我們非常需要你在底下留言分享。

方法二直接在本機安裝 NiFi,這過程會比方法一麻煩一點 (看底下篇幅就知道? ),但可以讓不想 (或不能) 使用 Docker 的讀者們一樣運作 NiFi。此外,筆者實作方法二是可以順利運行在 Arm64 架構下的,使用 M1 的讀者們可以參考。(大致上,需要稍微留意 Homebrew 目錄的位置即可,一些坑留到底下再做說明)

方法一

透過 Docker 安裝 Apache NiFi Docker Image

NiFi Docker Image
# 建立最新版本的NiFi
docker build -t apache/nifi:latest .
# 透過Docker運行NiFi
docker run --name nifi \
-p 8443:8443 \
-d \
apache/nifi:latest

基本上 Docker 的方法,簡潔有力,相信這也是許多開發人員仰賴它的原因,上述成功運行後,可以打開瀏覽器輸入 https://localhost:8443/nifi,Hello World, NiFi。

方法二

下載 nifi-1.14.0-source-release.zip 點擊安裝,當然如果你跟我一樣是MacOS,建議直接使用 Homebrew 進行安裝。

補充:M1 晶片安裝 Homebrew 可以參考這篇。特別注意的是 Arm64 架構下的 Homebrew 目錄會被安裝在 /opt/homebrew,與 Intel x86 架構的路徑不同 /usr/local/bin/homebrew

# 一行安裝,在終端機輸入
brew install nifi

等待安裝會需要一些時間,完成後你可以在 /opt/homebrew/Cellar/nifi/ 找到你的 nifi 檔案夾,然後會是 nifi 版本號目錄 (筆者安裝當下是1.14.0版),接著只要利用官網提供的基本指令便能調用 nifi,如下。

特別注意,官方指稱 bin/nifi.sh,是在libexec目錄底下,而非 ./1.14.0 目錄底下的 ./bin/nifi,筆者便是一開始搞錯,導致 NiFi 於終端機看似可以成功運行,但只要一登入 Web UI 就會噴出 An unexpected error has occurred.

libexec 目錄底下也會有一個 bin 資料夾
錯誤畫面

底下是正確流程:

# 前往Nifi資料夾底下的libexec目錄
cd /opt/homebrew/Cellar/nifi/1.14.0/libexec
# 背景運作NiFi
bin/nifi.sh start
# 確認NiFi運行狀態
bin/nifi.sh status
# 停止運作NiFi
bin/nifi.sh stop
成功在背景運作NiFi
確認終端機狀態後,開啟瀏覽器輸入 https://localhost:8443/nifi ,可以登入了!!

帳號密碼設定

# 一樣是根據官方文件設定帳號密碼 (密碼有限制12碼以上)
$ ./bin/nifi.sh set-single-user-credentials <username> <password>

完成設定後,你可以在/opt/homebrew/Cellar/nifi/1.14.0/libexec/conf 下的 login-identity-providers.xml 找到你設定的帳號與密碼。

筆者這裡密碼是先設hellonifii8888,檔案中也會進行文字加密

接著只要重新啟動一次 nifi 程序,便能以設定好的帳號密碼登入囉!

Finally, we’re here!!

Now that NiFi has been started, we can bring up the User Interface (UI) in order to create and monitor our dataflow. To get started, open a web browser and navigate to https://localhost:8443/nifi. The port can be changed by editing the nifi.properties file in the NiFi conf directory, but the default port is 8443.

補充一點:筆者在 port 的部分也踩了坑,許多的網路文章提到 NiFi 預設的port 是 8080,導致筆者一開始很困惑為何 Web UI 一直無法顯示網頁。仔細閱讀官方文件後才曉得 NiFi 預設的 port 是 8443 才正確。如果要選擇其他端口的話,則可以透過修改 config 進行指定。

參考文章

  1. Apache NiFi 官方文件
  2. Apache NiFi 如何從入門到不放棄

如果你覺得文章對你有幫助,請給我一些掌聲。按住拍手不放 10 秒,每人最多可以拍 50下哦!文章會陸續更新,主要關於數據分析、資料開發筆記,以及一些個人想法的文章,歡迎有興趣的朋友們追蹤分享呦!

--

--

Jacky Fu

Write code with the left hand, run an e-commerce business with the right. Develop the habit of thinking carefully and then sprinting to execute. 🌱