今天我來講下如何在 Zeppelin 裡做機器學習。機器學習的重要性我就不多說了,我們直奔主題。
Flink 在機器學習這個領域發力較晚,社群版沒有一個完整的機器學習算法庫可以用,Alink[1]是目前 Flink 生态圈相對比較完整的機器學習算法庫,Alink 也在往 Flink 社群貢獻的路上。今天我主要講的就是如何在 Zeppelin 裡使用 Alink。
為什麼在 Zeppelin 平台使用 Alink
Zeppelin 已經很好的內建了 Flink,在 Zeppelin 中使用 Alink 可以充分利用 Zeppelin 內建 Flink 所提供的特性,包括:
- 支援豐富的執行模式:Local/Remote/Yarn
- 支援對接 Hive
- 支援 UDF (Scala,Python)
- 支援 SQL (Batch SQL, Streaming SQL)
- 支援可視化
有關 Flink on Zeppelin 的具體特性支援可以參考下面的文章和釘釘直播視訊。
Flink on Zeppelin 文章系列:
- Flink on Zeppelin(1)入門篇
- Flink on Zeppelin(2)Batch 篇
- Flink on Zeppelin(3)Streaming 篇
Flink on Zeppelin 直播系列:
- Flink on Zeppelin: 極緻體驗(1) 入門 + Batch https://ververica.cn/developers/flink-training-course3/
- Flink on Zeppelin: 精緻體驗(2) Streaming + 進階應用
準備工作
首先你需要安裝 Zeppelin + Flink + Alink:
- 安裝 Zeppelin 和 Flink,請參考 Flink on Zeppelin 入門篇
- 運作下面的指令安裝 pyalink
pip install pyalink
- 安裝 Alink jar 包
- 安裝完 pyalink 之後,你可以在 python 目錄裡找到 Alink 的 jar 包,然後把這些 jar 包 copy 到 Flink 的 lib 目錄下,這是我的機器上的 jar 包位置:

驗證 Alink
現在你可以就可以在 Zeppelin 裡運作 Alink 了,有關 Alink 的具體用法我就不再詳述,大家可以參考1。首先我們來運作下面的代碼來驗證下前面的準備工作是否正确完成,是否能在 Zeppelin 裡運作 Alink。
如果你看到了下面的輸出,那麼說明 Alink 已經正确安裝。
Warning: useCustomEnv will do nothing, since useCustomEnv is used to initialize MLEnv.
a b
0 1 2
1 2 5
2 3 1
上面最重要的一行代碼是這行:
mlenv = useCustomEnv(gateway,
b_env,bt_env_2, s_env, st_env_2)
mlenv 是 Alink 的入口,b_env, bt_env_2, s_env, st_env_2 是 Zeppelin 為 Flink 建立的變量(代表 ExecutionEnvironment,BatchTableEnvironment, StreamExecutionEnvironment, StreamTableExecutionEnvironment)。這裡的 bt_env_2 和 st_env_2 代表支援 Flink Planner 的 TableEnvironment,因為 Alink 目前是基于 DataSet 的,隻支援 Flink Planner,是以這裡需要用 bt_env_2, st_env_2。(具體可參考Batch篇)
Logsitic Regression
接下來我會以 Alink 的 Logstic Regression 算法來示範如何在 Zeppelin 中使用 Alink。在這個 demo 中,我會選用 bank 資料,這也是我在 Batch 篇中使用的資料。機器學習的模型訓練往往隻是整個機器學習任務的一小步,在做機器學習之前往往需要清理資料,資料分析等等。這裡的 Bank 資料就是我的 Batch 篇中用 Flink 引擎清理過的資料。
bank 資料: https://archive.ics.uci.edu/ml/datasets/bank+marketing
Step 1. 定義訓練資料+測試資料
Step 2. 定義訓練特征和目标
Step 3. 建構 Pipeline
運作 Step 1 和 Step 2 都會非常快,因為沒有觸發 Flink Job,Step 3 會觸發 Flink Job,開始真正的機器學習訓練,右上角你會看到 Flink 的 Job Link。
Step 4. 檢視 Model Metrics
訓練模型結束之後隻是整個機器學習任務的一小步,之後你往往需要反複修改代碼來改進模型,檢視模型的 Metrics 就是其中很重要的一步,從模型的 Metrics 之中你往往可以看出一些端倪,給改進模型尋找方向。
■ Step 5. 錯誤資料診斷
除了檢視 Model Metrics,你還可以看看那些沒有被正确分類的資料,從這些資料中尋找線索。
這個就是如何在 Zeppelin 中使用 Alink 來做機器學習,正如之前所述,模型訓練隻是機器學習的一小步,機器學習之前你往往需要做資料清理,資料探索等等,這時候你就可以利用 Zeppelin 中內建的 Flink 能力來做這些事情,總之你可以在 Zeppelin 這個平台完成整個端到端的資料處理,資料分析,機器學習整條鍊路。
如果有碰到任何問題,請加入下面這個釘釘群讨論。