大數據

迄今為止最好用的Flink SQL教程:Flink SQL Cookbook on Zeppelin

對於初學者來說,學習 Flink 可能不是一件容易的事情。看文檔是一種學習,更重要的是實踐起來。但對於一個初學者來說要把一個 Flink SQL 跑起來還真不容易,要搭各種環境,真心累。很幸運的是,Flink 生態圈裡有這樣一款工具可以幫助你更有效率地學習 Flink:Zeppelin。本文不講 Flink on Zeppelin 相關的內容,更關注於如何用 Zeppelin 來學習 Flink。

給大家介紹一個可能是迄今為止用戶體驗最好的 Flink SQL 教程:Flink Sql Cookbook on Zeppelin。你無需寫任何代碼,只要照著這篇文章輕鬆幾步就能跑各種類型的 Flink SQL 語句。廢話不多說,我們開始吧。

這個教程其實就是 ververica 的 flink-sql-cookbook (https://github.com/ververica/flink-sql-cookbook/ )的改進版。這裡所有的例子你都可以在 Zeppelin 裡跑起來,而且不用寫任何代碼。我已經把裡面的例子都移植到了 Zeppelin。

準備環境

Step 1

git clone https://github.com/zjffdu/flink-sql-cookbook-on-zeppelin.git

這個 repo 裡是一些 Zeppelin notebook,裡面都是 flink-sql-cookbook 裡的例子。

Step 2

下載 Flink 1.12.1 (我沒有試過其他版本的 Flink,有興趣的同學可以試下),並解壓。

Step 3

編譯 Flink faker,地址:https://github.com/knaufk/flink-faker/

把編譯出來的 flink-faker-0.2.0.jar 拷貝到 Flink 的 lib 目錄下。這個 Flink faker 是一個特製的 table source,用來生成測試數據。我們的很多例子裡都會用到這個 Flink faker。

Step 4

運行下面的命令啟動最新版本的 Zeppelin。

docker run -p 8081:8081 -p 8080:8080 --rm -v $PWD/logs:/logs -v 
/Users/jzhang/github/flink-sql-cookbook-on-zeppelin:/notebook -v 
/Users/jzhang/Java/lib/flink-1.12.1:/flink -e ZEPPELIN_LOG_DIR='/logs' -e ZEPPELIN_NOTEBOOK_DIR='/notebook' --name zeppelin apache/zeppelin:0.9.0

需要注意的是這裡的 2 個目錄:

  1. /Users/jzhang/github/flink-sql-cookbook-on-zeppelin(這是Step 1 裡clone 下來的 repo 目錄)
  2. /Users/jzhang/Java/lib/flink-1.12.1 (這是 Step 2 下載下來並解壓之後的 Flink 目錄)

這兩個目錄是我自己本地目錄,請替換成你自己的目錄。

體驗 Flink Sql Cookbook 教程

好了,現在教程環境已經 ready 了,瀏覽器打開 http://localhost:8080 開始你的 Flink Sql 學習之旅吧。

image.png

這是 Zeppelin 的 UI,裡面已經有了一個文件夾 Flink Sql Cookbook,內含所有 Flink Sql 教程。首先我們需要配置下 Flink 解釋器,點擊右上角的菜單,選擇 interpreter,找到 Flink interpreter,修改其中的 FLINK_HOME 為 /flink (也就是上面 docker 命令裡我們掛載的 flink),然後點擊重啟 interpreter。

image.png

如果你碰到如下的錯誤的話,請往下拉,看 Depenendies 裡是不是有個用戶名在那裡,如果是的話,把它刪掉再 save(這是 Zeppelin 的一個前端 bug,社區正在 fix)

image.png

image.png

例子1:Filtering Data

接下來我們就選擇其中裡的 Foundations/04 Filtering Data 來體驗下。

image.png

這裡有 2 個段落(Paragraph),第一個段落是創建一個 server_logs 表,第二個段落是用 select where 語句去過濾這張表裡的數據,並按時間排序取最新的 10 條數據。下圖就是執行完 select 語句的效果,大家可以看到裡面的數據每隔 3 秒鐘會更新下,並且 status_code 的確永遠都是 401 或者 403,驗證了我們的 SQL 邏輯。右上角還有一個 FLINK JOB 的鏈接,點進去之後你還能看個這個 Job 的詳細信息。

1.gif

例子2:Lateral Table Join

接下來我們來看一個 Lateral Table Join 的例子,這是 Flink SQL 裡的其中一種 Join 類型。初學者看到這個名詞第一感覺會有點懵逼,上網查完資料之後也是似懂非懂的感覺,如果這時候有個比較直觀的例子給你,應該會對你的理解非常有幫助。這個教程裡就自帶了這麼一個例子,打開 Joins/06 Lateral Table Join,運行之後,你就能看到如下的效果。

2.gif

這裡我就舉這 2 個例子,裡面還有很多很多有用的例子(如下圖所示),大家可以自己去學習,可以嘗試修改下 SQL 再運行看看結果有什麼不一樣。

image.png

以上是我花了週末 2 天時間整理出來的學習資料,希望對大家學習 Flink 有所幫助,共同進步。不過這個教程還有改進的空間,有興趣的同學可以一起來改進,目前還有如下 3 個點可以改進:

每個Note裡的說明文檔都是英文的,可以翻譯成中文,讓更多人學習起來方便些。
現在每個教程都是文字形式,如果有誰能為每個教程都做個小視頻,配合講解的話,我覺得效果會更好。
增加更多案例教程,現在雖然內容很多,但還有空間增加更多教程。

社區二維碼.jpg

Leave a Reply

Your email address will not be published. Required fields are marked *